github.com/gogf/gf@v1.16.9/os/gtime/gtime_z_unit_basic_test.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/gogf/gf.
     6  
     7  package gtime_test
     8  
     9  import (
    10  	"github.com/gogf/gf/frame/g"
    11  	"testing"
    12  	"time"
    13  
    14  	"github.com/gogf/gf/os/gtime"
    15  	"github.com/gogf/gf/test/gtest"
    16  )
    17  
    18  func Test_SetTimeZone(t *testing.T) {
    19  	gtest.C(t, func(t *gtest.T) {
    20  		t.Assert(gtime.SetTimeZone("Asia/Shanghai"), nil)
    21  		//t.Assert(time.Local.String(), "Asia/Shanghai")
    22  	})
    23  }
    24  
    25  func Test_Nanosecond(t *testing.T) {
    26  	gtest.C(t, func(t *gtest.T) {
    27  		nanos := gtime.TimestampNano()
    28  		timeTemp := time.Unix(0, nanos)
    29  		t.Assert(nanos, timeTemp.UnixNano())
    30  	})
    31  }
    32  
    33  func Test_Microsecond(t *testing.T) {
    34  	gtest.C(t, func(t *gtest.T) {
    35  		micros := gtime.TimestampMicro()
    36  		timeTemp := time.Unix(0, micros*1e3)
    37  		t.Assert(micros, timeTemp.UnixNano()/1e3)
    38  	})
    39  }
    40  
    41  func Test_Millisecond(t *testing.T) {
    42  	gtest.C(t, func(t *gtest.T) {
    43  		millis := gtime.TimestampMilli()
    44  		timeTemp := time.Unix(0, millis*1e6)
    45  		t.Assert(millis, timeTemp.UnixNano()/1e6)
    46  	})
    47  }
    48  
    49  func Test_Second(t *testing.T) {
    50  	gtest.C(t, func(t *gtest.T) {
    51  		s := gtime.Timestamp()
    52  		timeTemp := time.Unix(s, 0)
    53  		t.Assert(s, timeTemp.Unix())
    54  	})
    55  }
    56  
    57  func Test_Date(t *testing.T) {
    58  	gtest.C(t, func(t *gtest.T) {
    59  		t.Assert(gtime.Date(), time.Now().Format("2006-01-02"))
    60  	})
    61  }
    62  
    63  func Test_Datetime(t *testing.T) {
    64  	gtest.C(t, func(t *gtest.T) {
    65  		datetime := gtime.Datetime()
    66  		timeTemp, err := gtime.StrToTime(datetime, "Y-m-d H:i:s")
    67  		if err != nil {
    68  			t.Error("test fail")
    69  		}
    70  		t.Assert(datetime, timeTemp.Time.Format("2006-01-02 15:04:05"))
    71  	})
    72  }
    73  
    74  func Test_ISO8601(t *testing.T) {
    75  	gtest.C(t, func(t *gtest.T) {
    76  		iso8601 := gtime.ISO8601()
    77  		t.Assert(iso8601, gtime.Now().Format("c"))
    78  	})
    79  }
    80  
    81  func Test_RFC822(t *testing.T) {
    82  	gtest.C(t, func(t *gtest.T) {
    83  		rfc822 := gtime.RFC822()
    84  		t.Assert(rfc822, gtime.Now().Format("r"))
    85  	})
    86  }
    87  
    88  func Test_StrToTime(t *testing.T) {
    89  	gtest.C(t, func(t *gtest.T) {
    90  		// Correct datetime string.
    91  		var testDateTimes = []string{
    92  			"2006-01-02 15:04:05",
    93  			"2006/01/02 15:04:05",
    94  			"2006.01.02 15:04:05.000",
    95  			"2006.01.02 - 15:04:05",
    96  			"2006.01.02 15:04:05 +0800 CST",
    97  			"2006-01-02T20:05:06+05:01:01",
    98  			"2006-01-02T14:03:04Z01:01:01",
    99  			"2006-01-02T15:04:05Z",
   100  			"02-jan-2006 15:04:05",
   101  			"02/jan/2006 15:04:05",
   102  			"02.jan.2006 15:04:05",
   103  			"02.jan.2006:15:04:05",
   104  		}
   105  
   106  		for _, item := range testDateTimes {
   107  			timeTemp, err := gtime.StrToTime(item)
   108  			t.Assert(err, nil)
   109  			t.Assert(timeTemp.Time.Format("2006-01-02 15:04:05"), "2006-01-02 15:04:05")
   110  		}
   111  
   112  		// Correct date string,.
   113  		var testDates = []string{
   114  			"2006.01.02",
   115  			"2006.01.02 00:00",
   116  			"2006.01.02 00:00:00.000",
   117  		}
   118  
   119  		for _, item := range testDates {
   120  			timeTemp, err := gtime.StrToTime(item)
   121  			t.Assert(err, nil)
   122  			t.Assert(timeTemp.Time.Format("2006-01-02 15:04:05"), "2006-01-02 00:00:00")
   123  		}
   124  
   125  		// Correct time string.
   126  		var testTimes = g.MapStrStr{
   127  			"16:12:01":     "15:04:05",
   128  			"16:12:01.789": "15:04:05.000",
   129  		}
   130  
   131  		for k, v := range testTimes {
   132  			time1, err := gtime.StrToTime(k)
   133  			t.Assert(err, nil)
   134  			time2, err := time.ParseInLocation(v, k, time.Local)
   135  			t.Assert(err, nil)
   136  			t.Assert(time1.Time, time2)
   137  		}
   138  
   139  		// formatToStdLayout
   140  		var testDateFormats = []string{
   141  			"Y-m-d H:i:s",
   142  			"\\T\\i\\m\\e Y-m-d H:i:s",
   143  			"Y-m-d H:i:s\\",
   144  			"Y-m-j G:i:s.u",
   145  			"Y-m-j G:i:su",
   146  		}
   147  
   148  		var testDateFormatsResult = []string{
   149  			"2007-01-02 15:04:05",
   150  			"Time 2007-01-02 15:04:05",
   151  			"2007-01-02 15:04:05",
   152  			"2007-01-02 15:04:05.000",
   153  			"2007-01-02 15:04:05.000",
   154  		}
   155  
   156  		for index, item := range testDateFormats {
   157  			timeTemp, err := gtime.StrToTime(testDateFormatsResult[index], item)
   158  			if err != nil {
   159  				t.Error("test fail")
   160  			}
   161  			t.Assert(timeTemp.Time.Format("2006-01-02 15:04:05.000"), "2007-01-02 15:04:05.000")
   162  		}
   163  
   164  		// 异常日期列表
   165  		var testDatesFail = []string{
   166  			"2006.01",
   167  			"06..02",
   168  		}
   169  
   170  		for _, item := range testDatesFail {
   171  			_, err := gtime.StrToTime(item)
   172  			if err == nil {
   173  				t.Error("test fail")
   174  			}
   175  		}
   176  
   177  		//test err
   178  		_, err := gtime.StrToTime("2006-01-02 15:04:05", "aabbccdd")
   179  		if err == nil {
   180  			t.Error("test fail")
   181  		}
   182  	})
   183  }
   184  
   185  func Test_ConvertZone(t *testing.T) {
   186  	gtest.C(t, func(t *gtest.T) {
   187  		//现行时间
   188  		nowUTC := time.Now().UTC()
   189  		testZone := "America/Los_Angeles"
   190  
   191  		//转换为洛杉矶时间
   192  		t1, err := gtime.ConvertZone(nowUTC.Format("2006-01-02 15:04:05"), testZone, "")
   193  		if err != nil {
   194  			t.Error("test fail")
   195  		}
   196  
   197  		//使用洛杉矶时区解析上面转换后的时间
   198  		laStr := t1.Time.Format("2006-01-02 15:04:05")
   199  		loc, err := time.LoadLocation(testZone)
   200  		t2, err := time.ParseInLocation("2006-01-02 15:04:05", laStr, loc)
   201  
   202  		//判断是否与现行时间匹配
   203  		t.Assert(t2.UTC().Unix(), nowUTC.Unix())
   204  
   205  	})
   206  
   207  	//test err
   208  	gtest.C(t, func(t *gtest.T) {
   209  		//现行时间
   210  		nowUTC := time.Now().UTC()
   211  		//t.Log(nowUTC.Unix())
   212  		testZone := "errZone"
   213  
   214  		//错误时间输入
   215  		_, err := gtime.ConvertZone(nowUTC.Format("06..02 15:04:05"), testZone, "")
   216  		if err == nil {
   217  			t.Error("test fail")
   218  		}
   219  		//错误时区输入
   220  		_, err = gtime.ConvertZone(nowUTC.Format("2006-01-02 15:04:05"), testZone, "")
   221  		if err == nil {
   222  			t.Error("test fail")
   223  		}
   224  		//错误时区输入
   225  		_, err = gtime.ConvertZone(nowUTC.Format("2006-01-02 15:04:05"), testZone, testZone)
   226  		if err == nil {
   227  			t.Error("test fail")
   228  		}
   229  	})
   230  }
   231  
   232  func Test_ParseDuration(t *testing.T) {
   233  	gtest.C(t, func(t *gtest.T) {
   234  		d, err := gtime.ParseDuration("1d")
   235  		t.Assert(err, nil)
   236  		t.Assert(d.String(), "24h0m0s")
   237  	})
   238  	gtest.C(t, func(t *gtest.T) {
   239  		d, err := gtime.ParseDuration("1d2h3m")
   240  		t.Assert(err, nil)
   241  		t.Assert(d.String(), "26h3m0s")
   242  	})
   243  	gtest.C(t, func(t *gtest.T) {
   244  		d, err := gtime.ParseDuration("-1d2h3m")
   245  		t.Assert(err, nil)
   246  		t.Assert(d.String(), "-26h3m0s")
   247  	})
   248  	gtest.C(t, func(t *gtest.T) {
   249  		d, err := gtime.ParseDuration("3m")
   250  		t.Assert(err, nil)
   251  		t.Assert(d.String(), "3m0s")
   252  	})
   253  	// error
   254  	gtest.C(t, func(t *gtest.T) {
   255  		d, err := gtime.ParseDuration("-1dd2h3m")
   256  		t.AssertNE(err, nil)
   257  		t.Assert(d.String(), "0s")
   258  	})
   259  }
   260  
   261  func Test_ParseTimeFromContent(t *testing.T) {
   262  	gtest.C(t, func(t *gtest.T) {
   263  		timeTemp := gtime.ParseTimeFromContent("我是中文2006-01-02 15:04:05我也是中文", "Y-m-d H:i:s")
   264  		t.Assert(timeTemp.Time.Format("2006-01-02 15:04:05"), "2006-01-02 15:04:05")
   265  
   266  		timeTemp1 := gtime.ParseTimeFromContent("我是中文2006-01-02 15:04:05我也是中文")
   267  		t.Assert(timeTemp1.Time.Format("2006-01-02 15:04:05"), "2006-01-02 15:04:05")
   268  
   269  		timeTemp2 := gtime.ParseTimeFromContent("我是中文02.jan.2006 15:04:05我也是中文")
   270  		t.Assert(timeTemp2.Time.Format("2006-01-02 15:04:05"), "2006-01-02 15:04:05")
   271  
   272  		//test err
   273  		timeTempErr := gtime.ParseTimeFromContent("我是中文", "Y-m-d H:i:s")
   274  		if timeTempErr != nil {
   275  			t.Error("test fail")
   276  		}
   277  	})
   278  
   279  	gtest.C(t, func(t *gtest.T) {
   280  		timeStr := "2021-1-27 9:10:24"
   281  		t.Assert(gtime.ParseTimeFromContent(timeStr, "Y-n-d g:i:s").String(), "2021-01-27 09:10:24")
   282  	})
   283  }
   284  
   285  func Test_FuncCost(t *testing.T) {
   286  	gtest.C(t, func(t *gtest.T) {
   287  		gtime.FuncCost(func() {
   288  
   289  		})
   290  	})
   291  }