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 }