校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > golang時間、時區、格式的使用方法

golang時間、時區、格式的使用方法

熱門標簽:江西轉化率高的羿智云外呼系統 學海導航地圖標注 廣州呼叫中心外呼系統 中國地圖標注省會高清 地圖標注的汽車標 高德地圖標注口訣 南通如皋申請開通400電話 西部云谷一期地圖標注 浙江高速公路地圖標注

前幾天,因為需要實現海外服務端定時停機,涉及到時區的概念。網上搜索了一下,大部分都是談time.Format中的Layout,非常不成體系,這里就簡單總結一下其中的時間初始化、時區轉化及格式轉換。

開發中,我們對時間的使用是比較多的,其應用場景,按照使用概率,從大到小,通常是:

  1. 獲取當前或數據庫中存儲的時間
  2. 比較兩個時間點的先后
  3. 顯示打印時間
  4. 時區轉換

對應到go,也就是幾個基本定義:

  1. 時間點與時間段:Time,Duration。好比MVC中的M。
  2. 時 區:Location,在時間轉換上,好比是MVC中的C。
  3. 格式化:Format的layout定義,好比MVC中的V。

單獨就Duration沒什么好談的,使用非常簡單。Time實例中的Add、Sub與其相關,非常容易上手,就不再多說。

時區

時區是時間運算非常重要的概念,特別強調與layout是兩個完全不同的概念。go語言通過Location來作為時區的運行實例,同一時刻轉換成為不同的時區,就需要通過不同的Location來進行。默認情況下,采用UTC(unix標準時間),而不是過去式的GMT(格林尼治標準時間)。

以下代碼展示了UTC標準、北京、美國洛杉磯在同一時刻的轉換:

  now := time.Now()
  local1, err1 := time.LoadLocation("") //等同于"UTC"
  if err1 != nil {
    fmt.Println(err1)
  }
  local2, err2 := time.LoadLocation("Local")//服務器設置的時區
  if err2 != nil {
    fmt.Println(err2)
  }
  local3, err3 := time.LoadLocation("America/Los_Angeles")
  if err3 != nil {
    fmt.Println(err3)
  }

  fmt.Println(now.In(local1))
  fmt.Println(now.In(local2))
  fmt.Println(now.In(local3))
  //output:
  //2016-12-04 07:39:06.270473069 +0000 UTC
  //2016-12-04 15:39:06.270473069 +0800 CST
  //2016-12-03 23:39:06.270473069 -0800 PST

代碼中,LoadLocation的輸入參數的取值,除了該函數的源代碼中可看到的”UTC”、”Local”,其余的值其實是遵照“IANA Time Zone”的規則,可以解壓$GOROOT/lib/time/zoneinfo.zip 這個文件打開查看。在Asia這個目錄,我看到了Chongqing,Hong_Kong,但沒Beijing。在國外獲取中國北京時間,要用”PRC”,當然”Asia/Chongqing”也是個方法:

loc, _:= time.LoadLocation("Asia/Chongqing")  //參數就是解壓文件的“目錄”+“/”+“文件名”。
fmt.Println(time.Now().In(loc))

值得強調的是,Location僅用于時區轉化,而不對time內部的數據產生影響(內部其實是unix標準時),因此,當幾個time實例進行Add、Sub的時候,不用關注Location是否相同。

時間格式化

前面例子中,打印結果非常丑陋,通常沒人關心秒之后的ns;明確時區后,很少需要與UTC的時差。這時候,就需要定義我們的layout了。

網上好多都說,“2006-01-02 15:04:05是go的誕生時間,所以這么設計Format的Layout”,應該不是真的。請看下表:

01/Jan 02 03/15 04 05 06 -07[00][:00] PM Mon
時差 上下午 星期幾

也就是1234567,分別對應:月日時分秒年 時差,很好記憶。只是稍微注意一下:

  • 月:01或Jan都可以
  • 小時:03表示12小時制,15表示24小時制。
  • 時差:是 -07 ,不是 07,后邊可以增加“00”或“:00”,表示更進一步的分秒時差。
  • 上下午:使用PM,不是AM。
  • 擺放順序:隨意,甚至重復都可以。源代碼包也有定義的常用格式供使用。

也許是因為06對應的“年”與go的項目啟動時間差不多,也就有了網上的誤傳。在源代碼time/time.go中,有非常明確的描述,粘貼一下,就不翻譯了:

// These are predefined layouts for use in Time.Format and Time.Parse.
// The reference time used in the layouts is the specific time:
// Mon Jan 2 15:04:05 MST 2006
// which is Unix time 1136239445. Since MST is GMT-0700,
// the reference time can be thought of as
// 01/02 03:04:05PM ‘06 -0700

雖然go已經提供了10多個常用格式:

const (
  ANSIC    = "Mon Jan _2 15:04:05 2006"
  UnixDate  = "Mon Jan _2 15:04:05 MST 2006"
  RubyDate  = "Mon Jan 02 15:04:05 -0700 2006"
  RFC822   = "02 Jan 06 15:04 MST"
  RFC822Z   = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
  RFC850   = "Monday, 02-Jan-06 15:04:05 MST"
  RFC1123   = "Mon, 02 Jan 2006 15:04:05 MST"
  RFC1123Z  = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
  RFC3339   = "2006-01-02T15:04:05Z07:00"
  RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
  Kitchen   = "3:04PM"
  // Handy time stamps.
  Stamp   = "Jan _2 15:04:05"
  StampMilli = "Jan _2 15:04:05.000"
  StampMicro = "Jan _2 15:04:05.000000"
  StampNano = "Jan _2 15:04:05.000000000"
)

但個人習慣還是“2006-01-02 15:04:05 Mon”,之前代碼稍加修改,就是這樣:

  formate:="2006-01-02 15:04:05 Mon"
  now := time.Now()
  local1, err1 := time.LoadLocation("UTC") //輸入參數"UTC",等同于""
  if err1 != nil {
    fmt.Println(err1)
  }
  local2, err2 := time.LoadLocation("Local")
  if err2 != nil {
    fmt.Println(err2)
  }
  local3, err3 := time.LoadLocation("America/Los_Angeles")
  if err3 != nil {
    fmt.Println(err3)
  }

  fmt.Println(now.In(local1).Format(formate))
  fmt.Println(now.In(local2).Format(formate))
  fmt.Println(now.In(local3).Format(formate))
  //output:
  //2016-12-04 08:06:39 Sun
  //2016-12-04 16:06:39 Sun
  //2016-12-04 00:06:39 Sun

時間初始化

除了最常用的time.Now,go還提供了通過unix標準時間、字符串兩種方式來初始化:

//通過字符串,默認UTC時區初始化Time
func Parse(layout, value string) (Time, error) 
//通過字符串,指定時區來初始化Time
func ParseInLocation(layout, value string, loc *Location) (Time, error) 

//通過unix 標準時間初始化Time
func Unix(sec int64, nsec int64) Time 

時間初始化的時候,一定要注意原始輸入值的時區。正好手里有一個變量,洛杉磯當地時間“2016-11-28 19:36:25”,unix時間精確到秒為1480390585。將其解析出來的代碼如下:

  local, _ := time.LoadLocation("America/Los_Angeles")
  timeFormat := "2006-01-02 15:04:05"
  //func Unix(sec int64, nsec int64) Time {
  time1 := time.Unix(1480390585, 0)                           //通過unix標準時間的秒,納秒設置時間
  time2, _ := time.ParseInLocation(timeFormat, "2016-11-28 19:36:25", local) //洛杉磯時間
  fmt.Println(time1.In(local).Format(timeFormat))
  fmt.Println(time2.In(local).Format(timeFormat))
  chinaLocal, _ := time.LoadLocation("Local")//運行時,該服務器必須設置為中國時區,否則最好是采用"Asia/Chongqing"之類具體的參數。
  fmt.Println(time2.In(chinaLocal).Format(timeFormat))
  //output:
  //2016-11-28 19:36:25
  //2016-11-28 19:36:25
  //2016-11-29 11:36:25

當然,如果輸入值是字符串,且帶有時區

“2016-12-04 15:39:06 +0800 CST”

則不需要采用ParseInLocation方法,直接使用Parse即可。

當然,其他time包中的函數還有很多,但網上已經有很多描述,就不再啰嗦。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • golang的時區和神奇的time.Parse的使用方法
  • 基于golang時間轉換的問題
  • 解決Golang time.Parse和time.Format的時區問題

標簽:許昌 吐魯番 保定 東營 曲靖 貴州 德宏 常州

巨人網絡通訊聲明:本文標題《golang時間、時區、格式的使用方法》,本文關鍵詞  golang,時間,時區,格式,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang時間、時區、格式的使用方法》相關的同類信息!
  • 本頁收集關于golang時間、時區、格式的使用方法的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    蜜桃av一区二区三区电影| 久久激情综合网| 精品国产一区二区三区av性色| 欧美日韩中文另类| 国产成人在线观看| 日韩电影在线观看网站| 久久丝袜美腿综合| 欧美一区二区三区喷汁尤物| 91网站在线播放| 国产一区二区三区四 | 日韩精品一区二区三区视频| 成人av手机在线观看| 久久99精品久久久久久久久久久久 | 国产精品久久久久7777按摩| 欧美一区二区成人6969| 在线观看网站黄不卡| 岛国一区二区在线观看| 日韩中文字幕亚洲一区二区va在线| 欧美亚洲国产bt| 国产成人精品影视| 久久99深爱久久99精品| 亚洲成人福利片| 亚洲男女一区二区三区| 国产精品白丝在线| 日本一区二区三区免费乱视频| 97久久超碰国产精品| 国产精品一区二区男女羞羞无遮挡 | 亚洲乱码精品一二三四区日韩在线 | 亚洲男同1069视频| 国产精品三级久久久久三级| 久久精品亚洲国产奇米99| 日韩欧美在线不卡| 91精品欧美综合在线观看最新| 国模套图日韩精品一区二区| 91精品欧美福利在线观看| 亚洲成人自拍网| 中文字幕精品三区| 成人毛片在线观看| 免费观看91视频大全| 日韩欧美国产小视频| 91久久精品国产91性色tv| 捆绑变态av一区二区三区| 国产精品久久久久久久午夜片| 久久综合av免费| 在线观看不卡一区| 久88久久88久久久| 亚洲一区二区五区| 亚洲国产视频一区二区| 丝袜亚洲精品中文字幕一区| 日韩专区欧美专区| 另类小说一区二区三区| 麻豆成人久久精品二区三区红 | 综合中文字幕亚洲| 亚洲免费视频中文字幕| 夜夜精品视频一区二区| 亚洲一区二区三区四区中文字幕| 国产拍揄自揄精品视频麻豆| 一区视频在线播放| 亚洲国产欧美在线| 日日骚欧美日韩| 狠狠色丁香久久婷婷综合丁香| 艳妇臀荡乳欲伦亚洲一区| 午夜一区二区三区在线观看| 蜜臀久久99精品久久久久宅男| 中文字幕一区二区三区在线观看| 日韩一级完整毛片| xnxx国产精品| 中文字幕五月欧美| 午夜精品久久久久影视| 精品写真视频在线观看| av男人天堂一区| 欧美日韩国产成人在线91| 久久亚洲精华国产精华液| 国产精品白丝在线| 日本网站在线观看一区二区三区 | 国产亚洲精品中文字幕| 亚洲青青青在线视频| 日本中文字幕一区| 丰满放荡岳乱妇91ww| 色综合色综合色综合| 日韩免费在线观看| 亚洲欧洲99久久| 蜜臀av性久久久久蜜臀aⅴ流畅 | 91精品国产91久久综合桃花| 2020国产精品自拍| 自拍偷拍亚洲综合| 麻豆精品在线视频| 色久综合一二码| 久久久久九九视频| 亚洲国产中文字幕在线视频综合| 又紧又大又爽精品一区二区| 精品综合免费视频观看| 色成人在线视频| 国产欧美va欧美不卡在线| 亚洲国产精品久久久久婷婷884 | 自拍偷自拍亚洲精品播放| 蜜桃视频一区二区三区在线观看| 日韩高清在线一区| 成人免费毛片app| 日韩限制级电影在线观看| 亚洲欧美日韩久久| 国产在线播放一区二区三区| 欧美日韩小视频| 亚洲人成精品久久久久| 国产精品自产自拍| 欧美一级理论片| 亚洲永久精品国产| 99久久99久久久精品齐齐| 久久久久久亚洲综合影院红桃| 久久久久久影视| 免费xxxx性欧美18vr| 欧美日韩一区二区三区不卡| 亚洲三级免费电影| 成人免费av资源| 2024国产精品| 美女被吸乳得到大胸91| 欧美日韩国产高清一区二区| 一区二区三区鲁丝不卡| 99国产精品久| 国产精品卡一卡二| 成人精品鲁一区一区二区| 久久一区二区三区国产精品| 久久se这里有精品| 日韩一区二区三区精品视频| 天天爽夜夜爽夜夜爽精品视频| 国精产品一区一区三区mba视频| 国产成人av影院| 精品国产乱码91久久久久久网站| 国产欧美日韩在线| 国产激情视频一区二区三区欧美| 97精品国产露脸对白| 国产精品久久久久久久久免费樱桃| 亚洲在线免费播放| 91福利在线观看| 亚洲一区在线观看视频| 欧美自拍丝袜亚洲| 亚洲一区二区偷拍精品| 欧美日韩国产片| 日本视频一区二区三区| 欧美电影免费观看完整版| 久久国产综合精品| xfplay精品久久| 成人免费电影视频| 亚洲日本成人在线观看| 在线欧美日韩国产| 亚洲成人一二三| 91精品婷婷国产综合久久| 精品在线免费观看| 国产欧美综合色| www.日韩大片| 亚洲午夜视频在线| 欧美精品日韩一区| 国产真实乱对白精彩久久| 欧美经典一区二区| 91麻豆精品在线观看| 一区二区三区欧美日| 91精品国产综合久久精品麻豆| 亚洲黄网站在线观看| 欧美日韩亚洲综合在线| 麻豆成人91精品二区三区| 国产日韩精品一区| 91香蕉视频黄| 日日摸夜夜添夜夜添国产精品 | 99久久夜色精品国产网站| 亚洲免费毛片网站| 91精品国产福利| 国产99精品视频| 一区二区在线电影| 日韩区在线观看| 国产91对白在线观看九色| 亚洲激情一二三区| 日韩精品专区在线影院重磅| 懂色av噜噜一区二区三区av| 一区二区不卡在线视频 午夜欧美不卡在| 九九国产精品视频| 亚洲人成网站在线| 欧美xxxxx牲另类人与| 不卡的看片网站| 天天综合色天天综合色h| 欧美韩日一区二区三区| 欧美日韩黄色一区二区| 国产风韵犹存在线视精品| 亚洲国产日日夜夜| 日本一区二区成人| 91精品综合久久久久久| 91在线精品秘密一区二区| 日本女优在线视频一区二区| 国产精品不卡一区二区三区| 日韩视频一区在线观看| 91蝌蚪porny九色| 狠狠色伊人亚洲综合成人| 一区二区欧美视频| 国产性色一区二区| 丝袜美腿亚洲一区| 亚洲色图视频网| 91在线免费播放| 亚洲三级理论片| av色综合久久天堂av综合| 日本在线播放一区二区三区| 亚洲人成在线观看一区二区|