时间格式化
golang的时间格式化非常奇怪,正常的时间格式化,比如java是yyyyMMdd这种,而python是%Y,%m等格式。
大部分语言都是这两种类型,比如mysql就和python一致,excel和java一致。
但是golang的时间格式化,就完全不一样了。它要求你记住golang的诞生时间,2006年1月2日,15点04分05秒。所以它的时间格式化是这样的:
package main
import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
formattedTime := currentTime.Format("2006-01-02 15:04:05.000")
fmt.Println("Formatted time:", formattedTime)
}
不过也挺好记忆的,12345,1月2日3点4分5秒,不过这个3点是下午3点,而不是上午3点。
输出结果:
Formatted time: 2024-11-20 19:46:11.083
解析时间
解析时间用time.Parse()函数,如以下例子:
package main
package main
import (
"fmt"
"time"
)
func main() {
// printNow()
t, err := time.Parse("2006-01-02 15:04:05.000", "2023-07-28 19:03:49.123")
if err != nil {
fmt.Println(err)
}
fmt.Println(t)
}
golang的时间加减操作
golang的时间是只读的,不能修改。如果要加减时间,需要使用time.Add()函数,返回一个新的时间。
package main
import (
"fmt"
"time"
)
func main() {
// printNow()
// ParseTime()
now := time.Now()
other := now.Add(time.Hour * 5)
fmt.Println(now, other)
}
输出结果:
2024-11-20 19:59:48.7280168 +0800 CST m=+0.000000001 2024-11-21 00:59:48.7280168 +0800 CST m=+18000.000000001
日期加减操作
日期加减操作,需要使用time.AddDate()函数。该函数有三个参数,第一个是年数,第二个是月数,第三个是天数。
package main
import (
"fmt"
"time"
)
func main() {
// Iso()
// 获取当前时间
now := time.Now()
fmt.Println("当前时间:", now)
// 加5天
fiveDaysLater := now.AddDate(0, 0, 5)
fmt.Println("5天后:", fiveDaysLater)
// 减3天
threeDaysBefore := now.AddDate(0, 0, -3)
fmt.Println("3天前:", threeDaysBefore)
}
输出结果:
当前时间: 2024-11-20 20:21:56.5692588 +0800 CST m=+0.001002701
5天后: 2024-11-25 20:21:56.5692588 +0800 CST
3天前: 2024-11-17 20:21:56.5692588 +0800 CST
时区操作
time.In可以转换时区,FixedZone()函数可以设置时区。如以下代码:
package main
import (
"fmt"
"time"
)
func main() {
// printNow()
// ParseTime()
// TimeAdd()
// 转换时区
now := time.Now()
now = now.In(time.FixedZone("UTC$$$$", 0))
fmt.Println(now)
}
对于带时区的字符串如何解析,在formart.go文件中,有这么一行源代码:
RFC3339 = "2006-01-02T15:04:05Z07:00"
所以time.RFC3339就可以解析iso格式的带时区字符串。