diff --git a/core/block/object/objectcreator/creator_test.go b/core/block/object/objectcreator/creator_test.go index f4f0e6af2..cd78e773f 100644 --- a/core/block/object/objectcreator/creator_test.go +++ b/core/block/object/objectcreator/creator_test.go @@ -118,7 +118,7 @@ func TestService_CreateObject(t *testing.T) { return bundle.TypeKeyDate.URL(), nil }) ts := time.Now() - name := dateutil.TimeToDateName(ts) + name := dateutil.TimeToDateName(ts, nil) // when id, details, err := f.service.CreateObject(context.Background(), spaceId, CreateObjectRequest{ diff --git a/core/block/source/date.go b/core/block/source/date.go index dda1aaf61..0b222695b 100644 --- a/core/block/source/date.go +++ b/core/block/source/date.go @@ -62,7 +62,7 @@ func (d *date) getDetails() (*types.Struct, error) { } return &types.Struct{Fields: map[string]*types.Value{ - bundle.RelationKeyName.String(): pbtypes.String(dateutil.TimeToDateName(t)), + bundle.RelationKeyName.String(): pbtypes.String(dateutil.TimeToDateName(t, nil)), bundle.RelationKeyId.String(): pbtypes.String(d.id), bundle.RelationKeyType.String(): pbtypes.String(d.typeId), bundle.RelationKeyIsReadonly.String(): pbtypes.Bool(true), diff --git a/core/date/date_test.go b/core/date/date_test.go index ce41e905e..e477bb5af 100644 --- a/core/date/date_test.go +++ b/core/date/date_test.go @@ -30,7 +30,7 @@ func TestBuildDetailsFromTimestamp(t *testing.T) { assert.Equal(t, spaceId, pbtypes.GetString(details, bundle.RelationKeySpaceId.String())) tt := time.Unix(ts, 0) assert.Equal(t, dateutil.TimeToDateId(tt), pbtypes.GetString(details, bundle.RelationKeyId.String())) - assert.Equal(t, dateutil.TimeToDateName(tt), pbtypes.GetString(details, bundle.RelationKeyName.String())) + assert.Equal(t, dateutil.TimeToDateName(tt, nil), pbtypes.GetString(details, bundle.RelationKeyName.String())) assert.Equal(t, bundle.TypeKeyDate.URL(), pbtypes.GetString(details, bundle.RelationKeyType.String())) assert.Equal(t, ts, pbtypes.GetInt64(details, bundle.RelationKeyTimestamp.String())) }) diff --git a/util/dateutil/util.go b/util/dateutil/util.go index e381ff13a..6878cb29b 100644 --- a/util/dateutil/util.go +++ b/util/dateutil/util.go @@ -13,13 +13,14 @@ const ( dateNameLayout = "02 Jan 2006" ) +// TimeToDateId returns date object id. Its format is _date_YYYY-MM-DD-hh-mm-ss in UTC time zone func TimeToDateId(t time.Time) string { - return addr.DatePrefix + t.Format(dateIdLayout) + return addr.DatePrefix + t.UTC().Format(dateIdLayout) } // TimeToShortDateId should not be used to generate Date object id. Use TimeToDateId instead func TimeToShortDateId(t time.Time) string { - return addr.DatePrefix + t.Format(shortDateIdLayout) + return addr.DatePrefix + t.UTC().Format(shortDateIdLayout) } func ParseDateId(id string) (time.Time, error) { @@ -30,8 +31,11 @@ func ParseDateId(id string) (time.Time, error) { return time.Parse(shortDateIdLayout, strings.TrimPrefix(id, addr.DatePrefix)) } -func TimeToDateName(t time.Time) string { - return t.Format(dateNameLayout) +func TimeToDateName(t time.Time, loc *time.Location) string { + if loc != nil { + return t.In(loc).Format(dateNameLayout) + } + return t.Local().Format(dateNameLayout) } func DateNameToId(name string) (string, error) { diff --git a/util/dateutil/util_test.go b/util/dateutil/util_test.go index 622d1aedf..8650bae21 100644 --- a/util/dateutil/util_test.go +++ b/util/dateutil/util_test.go @@ -1,6 +1,7 @@ package dateutil import ( + "fmt" "testing" "time" @@ -12,19 +13,26 @@ import ( func TestTimeToDateId(t *testing.T) { assert.Equal(t, "_date_2024-11-07-12-25-59", TimeToDateId(time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC))) assert.Equal(t, "_date_1998-01-01-00-01-01", TimeToDateId(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC))) + assert.Equal(t, "_date_1997-12-31-20-01-01", TimeToDateId(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.FixedZone("UTC", +4*60*60)))) assert.Equal(t, "_date_2124-12-25-23-34-00", TimeToDateId(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC))) + assert.Equal(t, "_date_2124-12-26-01-34-00", TimeToDateId(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.FixedZone("UTC", -2*60*60)))) } func TestTimeToShortDateId(t *testing.T) { assert.Equal(t, "_date_2024-11-07", TimeToShortDateId(time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC))) assert.Equal(t, "_date_1998-01-01", TimeToShortDateId(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC))) + assert.Equal(t, "_date_1997-12-31", TimeToShortDateId(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.FixedZone("UTC", +4*60*60)))) assert.Equal(t, "_date_2124-12-25", TimeToShortDateId(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC))) + assert.Equal(t, "_date_2124-12-26", TimeToShortDateId(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.FixedZone("UTC", -2*60*60)))) } func TestTimeToDateName(t *testing.T) { - assert.Equal(t, "07 Nov 2024", TimeToDateName(time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC))) - assert.Equal(t, "01 Jan 1998", TimeToDateName(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC))) - assert.Equal(t, "25 Dec 2124", TimeToDateName(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC))) + assert.Equal(t, "07 Nov 2024", TimeToDateName(time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC), time.UTC)) + assert.Equal(t, "01 Jan 1998", TimeToDateName(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC), time.UTC)) + assert.Equal(t, "31 Dec 1997", TimeToDateName(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.FixedZone("UTC", +4*60*60)), time.UTC)) + assert.Equal(t, "25 Dec 2124", TimeToDateName(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC), time.UTC)) + assert.Equal(t, "26 Dec 2124", TimeToDateName(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.FixedZone("UTC", -2*60*60)), time.UTC)) + assert.Equal(t, "25 Dec 2124", TimeToDateName(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.FixedZone("UTC", -2*60*60)), time.FixedZone("UTC", -2*60*60))) } func TestParseDateId(t *testing.T) { @@ -33,11 +41,15 @@ func TestParseDateId(t *testing.T) { time.Date(2024, time.December, 7, 12, 25, 59, 0, time.UTC), time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC), time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC), + time.Date(1998, time.January, 1, 0, 1, 1, 0, time.FixedZone("UTC", +4*60*60)), time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC), + time.Date(2124, time.December, 25, 23, 34, 0, 0, time.FixedZone("UTC", -2*60*60)), } { - ts2, err := ParseDateId(TimeToDateId(ts)) + dateId := TimeToDateId(ts) + ts2, err := ParseDateId(dateId) + fmt.Println(ts, dateId, ts2) assert.NoError(t, err) - assert.Equal(t, ts, ts2) + assert.Equal(t, ts.Unix(), ts2.Unix()) } })