Golang中的格式化時間輸出

weixin_33890499發表於2018-09-18

通常我們在程式處理過程需要對時間進行一定格式化的輸出,以便讓使用者或者其他程式能夠更加友好的識別時間,本篇記錄下在使用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:%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方法來進行時間的格式化。

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

# 僅輸出:月-日(09-18)
fmt.Println(now.Format("01-02"))

相關文章