真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

golang中怎么格式化時間和時區(qū)-創(chuàng)新互聯(lián)

這篇文章給大家介紹golang中怎么格式化時間和時區(qū),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)公司是一家集成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)站頁面設(shè)計、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)網(wǎng)絡(luò)公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗,以探求精品塑造與理念升華,設(shè)計最適合用戶的網(wǎng)站頁面。 合作只是第一步,服務(wù)才是根本,我們始終堅持講誠信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶在蓬勃發(fā)展的市場環(huán)境中,互促共生。

時區(qū)

時區(qū)是時間運算非常重要的概念,特別強(qiáng)調(diào)與layout是兩個完全不同的概念。go語言通過Location來作為時區(qū)的運行實例,同一時刻轉(zhuǎn)換成為不同的時區(qū),就需要通過不同的Location來進(jìn)行。默認(rèn)情況下,采用UTC(unix標(biāo)準(zhǔn)時間),而不是過去式的GMT(格林尼治標(biāo)準(zhǔn)時間)。

以下代碼展示了UTC標(biāo)準(zhǔn)、北京、美國洛杉磯在同一時刻的轉(zhuǎn)換:

  now := time.Now()
  local1, err1 := time.LoadLocation("") //等同于"UTC"
  if err1 != nil {
    fmt.Println(err1)
  }
  local2, err2 := time.LoadLocation("Local")//服務(wù)器設(shè)置的時區(qū)
  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的輸入?yún)?shù)的取值,除了該函數(shù)的源代碼中可看到的”UTC”、”Local”,其余的值其實是遵照“IANA Time Zone”的規(guī)則,可以解壓$GOROOT/lib/time/zoneinfo.zip 這個文件打開查看。在Asia這個目錄,我看到了Chongqing,Hong_Kong,但沒Beijing。在國外獲取中國北京時間,要用”PRC”,當(dāng)然”Asia/Chongqing”也是個方法:

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

值得強(qiáng)調(diào)的是,Location僅用于時區(qū)轉(zhuǎn)化,而不對time內(nèi)部的數(shù)據(jù)產(chǎn)生影響(內(nèi)部其實是unix標(biāo)準(zhǔn)時),因此,當(dāng)幾個time實例進(jìn)行Add、Sub的時候,不用關(guān)注Location是否相同。

時間格式化

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

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

01/Jan0203/15040506-07[00][:00]PMMon
時差上下午星期幾

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

  • 月:01或Jan都可以

  • 小時:03表示12小時制,15表示24小時制。

  • 時差:是 -07 ,不是 07,后邊可以增加“00”或“:00”,表示更進(jìn)一步的分秒時差。

  • 上下午:使用PM,不是AM。

  • 擺放順序:隨意,甚至重復(fù)都可以。源代碼包也有定義的常用格式供使用。

也許是因為06對應(yīng)的“年”與go的項目啟動時間差不多,也就有了網(wǎng)上的誤傳。在源代碼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已經(jīng)提供了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"
)

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

  formate:="2006-01-02 15:04:05 Mon"
  now := time.Now()
  local1, err1 := time.LoadLocation("UTC") //輸入?yún)?shù)"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標(biāo)準(zhǔn)時間、字符串兩種方式來初始化:

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

//通過unix 標(biāo)準(zhǔn)時間初始化Time
func Unix(sec int64, nsec int64) Time

時間初始化的時候,一定要注意原始輸入值的時區(qū)。正好手里有一個變量,洛杉磯當(dāng)?shù)貢r間“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標(biāo)準(zhǔn)時間的秒,納秒設(shè)置時間
  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")//運行時,該服務(wù)器必須設(shè)置為中國時區(qū),否則最好是采用"Asia/Chongqing"之類具體的參數(shù)。
  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

當(dāng)然,如果輸入值是字符串,且?guī)в袝r區(qū)

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

關(guān)于golang中怎么格式化時間和時區(qū)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


本文標(biāo)題:golang中怎么格式化時間和時區(qū)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://weahome.cn/article/goiid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部