Golang中的格式化时间输出 顶
- 2019 年 10 月 4 日
- 筆記
通常我们在程序处理过程需要对时间进行一定格式化的输出,以便让用户或者其他程序能够更加友好的识别时间,本篇记录下在使用golang语言过程中如何格式化时间。 通常情况下我们可以使用linux shell很方便的格式化时间:
sh-4.1$ date 2018年 09月 18日 星期二 12:49:06 CST sh-4.1$ date "+%Y-%m-%dT %H:%M:%S" 2018-09-18T 12:49:07 %y 表示小年(2018->18) %h 表示X月(9月) # 直接输出时间戳 sh-4.1$ date +%s 1537248887
在python中我们可能是这样格式化时间: 在python中格式化时间的参数和在linux shell中的参数是一致的
In [1]: import datetime In [2]: datetime.datetime.now().strftime('%Y-%m-%dT %H:%M:%S') Out[2]: '2018-09-18T 13:31:35' # 按照一定时间格式进行时间戳转换 In [3]: import time In [4]: int(time.mktime(time.strptime('2018-09-18T 13:31:35', "%Y-%m-%dT %H:%M:%S"))) Out[4]: 1537248695 # 获取当前和前一天,前两天时间 import datetime now = datetime.datetime.now() last1 = now+datetime.timedelta(days=-1) last2 = last1+datetime.timedelta(days=-1) print(now.strftime('%Y-%m-%d %H:%M:%S')) print(last1.strftime('%Y-%m-%d %H:%M:%S')) print(last2.strftime('%Y-%m-%d %H:%M:%S')) $ python testdate.py 2018-09-28 17:08:35 2018-09-27 17:08:35 2018-09-26 17:08:35
而在Golang中我们想要格式化时间需要如下操作:
➜ ✗ cat test-time.go package main import ( "time" "fmt" ) func main() { now := time.Now() timestamp := now.Unix() fmt.Println("时间戳:"+fmt.Sprintf("%d",timestamp)) fmt.Printf("当前时间:%d-%d-%dT %d:%d:%dn",now.Year(),now.Month(),now.Day(),now.Hour(),now.Minute(),now.Second()) } ➜ ✗ go run test.go 时间戳:1537251120 当前时间:2018-9-18T 14:12:0 ➜ ✗ go run test.go 时间戳:1537251122 当前时间:2018-9-18T 14:12:2
在golang中使用Time
结构体的一些方法可以很方便且友好型的格式化当前时间,不过比较细心的朋友可能会发现一些问题即使用Time结构体的方法获取具体的时间时(年月日时分秒),这些方法属于懒惰型输出,比如现在是9月,使用*Time.Month()时会输出9而不是09;*Time.Second()遇到个位数秒时,也并不会补全十位上的0
。这个时候对于再使用Time
相关的方法时会无法和标准的时间格式匹配,需要用到Format
方法来进行时间的格式化。
fmt.Println(now.Format("2006-01-02T 15:04:05")) # 输出格式为: 2018-09-18T 14:25:01 # 仅输出:月-日(09-18) fmt.Println(now.Format("01-02"))