mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 10:06:24 +05:00
added optional layout parameter for *localtime dataconverter
This commit is contained in:
committed by
Dan Christian Bogos
parent
3dceaa5642
commit
5929cd0d1b
@@ -127,11 +127,11 @@ func NewDataConverter(params string) (conv DataConverter, err error) {
|
||||
return NewTimeStringConverter(layout), nil
|
||||
|
||||
case strings.HasPrefix(params, MetaLocalTime):
|
||||
timezone := "Local"
|
||||
var paramsStr string
|
||||
if len(params) > len(MetaLocalTime) {
|
||||
timezone = params[len(MetaLocalTime)+1:]
|
||||
paramsStr = params[len(MetaLocalTime)+1:]
|
||||
}
|
||||
return NewLocalTimeConverter(timezone)
|
||||
return NewLocalTimeConverter(paramsStr)
|
||||
case strings.HasPrefix(params, MetaRandom):
|
||||
if len(params) == len(MetaRandom) { // no extra params, defaults implied
|
||||
return NewRandomConverter(EmptyString)
|
||||
@@ -825,15 +825,29 @@ func (mS *DurationMinutesConverter) Convert(in any) (
|
||||
}
|
||||
|
||||
type LocalTimeConverter struct {
|
||||
loc *time.Location
|
||||
loc *time.Location
|
||||
layout string
|
||||
}
|
||||
|
||||
func NewLocalTimeConverter(locStr string) (DataConverter, error) {
|
||||
func NewLocalTimeConverter(params string) (DataConverter, error) {
|
||||
locStr := "Local"
|
||||
layout := time.DateTime
|
||||
if len(params) != 0 {
|
||||
values := strings.SplitN(params, InInFieldSep, 2)
|
||||
if values[0] != EmptyString {
|
||||
locStr = values[0]
|
||||
}
|
||||
if len(values) > 1 {
|
||||
if values[1] != EmptyString {
|
||||
layout = values[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
loc, err := time.LoadLocation(locStr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return LocalTimeConverter{loc: loc}, nil
|
||||
return LocalTimeConverter{loc: loc, layout: layout}, nil
|
||||
}
|
||||
func (lt LocalTimeConverter) Convert(in any) (out any, err error) {
|
||||
var tm time.Time
|
||||
@@ -849,6 +863,5 @@ func (lt LocalTimeConverter) Convert(in any) (out any, err error) {
|
||||
return nil, fmt.Errorf("*localtime converter: unsupported input")
|
||||
}
|
||||
tm = tm.In(lt.loc)
|
||||
return tm.Format(time.DateTime), nil
|
||||
|
||||
return tm.Format(lt.layout), nil
|
||||
}
|
||||
|
||||
@@ -2003,6 +2003,10 @@ func TestDurationMinutesConverter(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLocalTimeDurationConverter(t *testing.T) {
|
||||
loadTimelocation := func(tzName string, year int, month time.Month, day, hour, min, sec, nsec int) time.Time {
|
||||
loc, _ := time.LoadLocation(tzName)
|
||||
return time.Date(year, month, day, hour, min, sec, nsec, loc)
|
||||
}
|
||||
testCases := []struct {
|
||||
name string
|
||||
input any
|
||||
@@ -2014,6 +2018,9 @@ func TestLocalTimeDurationConverter(t *testing.T) {
|
||||
{name: "Convert to UTC timezone", input: "2025-05-07T16:25:08+02:00", params: "*localtime:UTC", expectValue: "2025-05-07 14:25:08"},
|
||||
{name: "Convert to UTC+01:00 timezone", input: "2025-05-07T14:25:08Z", params: "*localtime:Europe/Dublin", expectValue: "2025-05-07 15:25:08"},
|
||||
{name: "Convert to UTC+03:00 timezone", input: time.Date(2025, 5, 5, 15, 5, 0, 0, time.UTC), params: "*localtime:Europe/Istanbul", expectValue: "2025-05-05 18:05:00"},
|
||||
{name: "Convert to UTC+03:00 timezone", input: "2025-05-08T10:07:08Z", params: "*localtime:Europe/Dublin:02/01/2006 15:04:05", expectValue: "08/05/2025 11:07:08"},
|
||||
{name: "Convert string UTC-07:00", input: "2025-03-08T23:50:00-07:00", params: "*localtime:Europe/Paris:15:04:05 02/01/2006", expectValue: "07:50:00 09/03/2025"},
|
||||
{name: "Convert time.Time from Asia/Dubai", input: loadTimelocation("Asia/Dubai", 2025, time.November, 20, 22, 15, 0, 0), params: "*localtime:Australia/Sydney:Jan 2, 2006 at 3:04pm (MST)", expectValue: "Nov 21, 2025 at 5:15am (AEDT)"},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
|
||||
Reference in New Issue
Block a user