github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/timelib/mysql_timestamp_test.go (about)

     1  package timelib
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestTimestamp(t *testing.T) {
    11  	tt := assert.New(t)
    12  
    13  	t0, _ := time.Parse(time.RFC3339, "2017-03-27T23:58:59+08:00")
    14  	dt := MySQLTimestamp(t0)
    15  	tt.Equal("2017-03-27T23:58:59+08:00", dt.String())
    16  	tt.Equal("2017-03-27T23:58:59+08:00", dt.Format(time.RFC3339))
    17  	tt.Equal(int64(1490630339), dt.Unix())
    18  	tt.Equal(MySQLTimestampUnixZero.Unix(), int64(0))
    19  	tt.Equal(MySQLTimestampUnixZero.IsZero(), true)
    20  	tt.Equal("1970-01-01T08:00:00+08:00", MySQLTimestampUnixZero.String())
    21  
    22  	{
    23  		input := "1970-01-01"
    24  		r, err := ParseMySQLTimestampFromStringWithLayout(input, DATE_LAYOUT_S1)
    25  		tt.Nil(err)
    26  		input = "1970-01-01 08:00:00"
    27  		r, err = ParseMySQLTimestampFromStringWithLayout(input, TIME_LAYOUT_S1)
    28  		tt.Nil(err)
    29  		tt.Equal(MySQLTimestampZero.IsZero(), r.IsZero())
    30  
    31  		input = "1970-01-01 08:00:00"
    32  		_, err = ParseMySQLTimestampFromStringWithLayout(input, DATE_LAYOUT_S1)
    33  		tt.NotNil(err)
    34  		input = "1970-01-01"
    35  		_, err = ParseMySQLTimestampFromStringWithLayout(input, TIME_LAYOUT_S1)
    36  		tt.NotNil(err)
    37  	}
    38  
    39  	{
    40  		dateString, err := dt.MarshalText()
    41  		tt.NoError(err)
    42  		tt.Equal("2017-03-27T23:58:59+08:00", string(dateString))
    43  
    44  		dt2 := MySQLTimestampZero
    45  		tt.True(dt2.IsZero())
    46  		err = dt2.UnmarshalText(dateString)
    47  		tt.NoError(err)
    48  		tt.Equal(dt, dt2)
    49  		tt.False(dt2.IsZero())
    50  	}
    51  	{
    52  		value, err := dt.Value()
    53  		tt.NoError(err)
    54  		tt.Equal(int64(1490630339), value.(int64))
    55  
    56  		dt2 := MySQLTimestampZero
    57  		tt.True(dt2.IsZero())
    58  		err = dt2.Scan(value)
    59  		tt.NoError(err)
    60  		tt.Equal(dt, dt2)
    61  		tt.False(dt2.IsZero())
    62  	}
    63  	{
    64  		dt3 := MySQLTimestampZero
    65  		err := dt3.UnmarshalText([]byte("\"\""))
    66  		tt.NoError(err)
    67  	}
    68  	{
    69  		dt3 := MySQLTimestampZero
    70  		err := dt3.UnmarshalText([]byte("0"))
    71  		tt.NoError(err)
    72  	}
    73  }