diff --git a/parse.go b/parse.go index 4efee55..911a801 100644 --- a/parse.go +++ b/parse.go @@ -102,3 +102,24 @@ func ParsePtrGRPCTimeToTime(t *timestamppb.Timestamp) time.Time { return ts } + +// ParseTimeToPtrTime parse time to pointer time, timezone UTC +func ParseTimeToPtrTime(t time.Time) *time.Time { + now := time.Now().UTC() + if t.IsZero() { + return &now + } + return &t +} + +// ParsePtrTimeToTime parse pointer time to time, timezone UTC +func ParsePtrTimeToTime(t *time.Time) time.Time { + if t == nil { + return time.Now().UTC() + } + + if t.IsZero() { + return time.Now().UTC() + } + return *t +} diff --git a/parse_test.go b/parse_test.go index 1ecb990..ba11fa4 100644 --- a/parse_test.go +++ b/parse_test.go @@ -201,3 +201,73 @@ func (p *ParseSuite) Test_ParsePtrGRPCTimeToTime() { assert.Equal(p.T(), ts.Minute(), result.Minute()) assert.Equal(p.T(), ts.Second(), result.Second()) } + +func (p *ParseSuite) Test_ParseTimeToPtrTime() { + ts := time.Now().UTC() + + result := cookbook.ParseTimeToPtrTime(ts) + + assert.NotNil(p.T(), result) + assert.Equal(p.T(), ts.Year(), result.Year()) + assert.Equal(p.T(), ts.Month(), result.Month()) + assert.Equal(p.T(), ts.Day(), result.Day()) + assert.Equal(p.T(), ts.Hour(), result.Hour()) + assert.Equal(p.T(), ts.Minute(), result.Minute()) + assert.Equal(p.T(), ts.Second(), result.Second()) +} + +func (p *ParseSuite) Test_ParseTimeToPtrTime_Zero() { + ts := time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC) + + result := cookbook.ParseTimeToPtrTime(ts) + + t := time.Now().UTC() + + assert.NotNil(p.T(), result) + assert.Equal(p.T(), t.Year(), result.Year()) + assert.Equal(p.T(), t.Month(), result.Month()) + assert.Equal(p.T(), t.Day(), result.Day()) + assert.Equal(p.T(), t.Hour(), result.Hour()) + assert.Equal(p.T(), t.Minute(), result.Minute()) +} + +func (p *ParseSuite) Test_ParsePtrTimeToTime() { + ts := time.Now().UTC() + + result := cookbook.ParsePtrTimeToTime(&ts) + + assert.Equal(p.T(), ts.Year(), result.Year()) + assert.Equal(p.T(), ts.Month(), result.Month()) + assert.Equal(p.T(), ts.Day(), result.Day()) + assert.Equal(p.T(), ts.Hour(), result.Hour()) + assert.Equal(p.T(), ts.Minute(), result.Minute()) + assert.Equal(p.T(), ts.Second(), result.Second()) +} + +func (p *ParseSuite) Test_ParsePtrTimeToTime_Nil() { + ts := time.Now().UTC() + + result := cookbook.ParsePtrTimeToTime(nil) + + assert.Equal(p.T(), ts.Year(), result.Year()) + assert.Equal(p.T(), ts.Month(), result.Month()) + assert.Equal(p.T(), ts.Day(), result.Day()) + assert.Equal(p.T(), ts.Hour(), result.Hour()) + assert.Equal(p.T(), ts.Minute(), result.Minute()) + assert.Equal(p.T(), ts.Second(), result.Second()) +} + +func (p *ParseSuite) Test_ParsePtrTimeToTime_Zero() { + ts := time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC) + + result := cookbook.ParsePtrTimeToTime(&ts) + + t := time.Now().UTC() + + assert.NotNil(p.T(), result) + assert.Equal(p.T(), t.Year(), result.Year()) + assert.Equal(p.T(), t.Month(), result.Month()) + assert.Equal(p.T(), t.Day(), result.Day()) + assert.Equal(p.T(), t.Hour(), result.Hour()) + assert.Equal(p.T(), t.Minute(), result.Minute()) +}