Golang中的格式化时间输出

一般咱们在程序处理过程须要对时间进行必定格式化的输出,以便让用户或者其余程序可以更加友好的识别时间,本篇记录下在使用golang语言过程当中如何格式化时间。一般状况下咱们可使用linux shell很方便的格式化时间:python

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中的参数是一致的linux

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中咱们想要格式化时间须要以下操做: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:%d\n",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方法来进行时间的格式化。shell

fmt.Println(now.Format("2006-01-02T 15:04:05"))
# 输出格式为:
2018-09-18T 14:25:01

# 仅输出:月-日(09-18)
fmt.Println(now.Format("01-02"))复制代码

欢迎关注个人公众号Wechat.jpegspa

相关文章
相关标签/搜索