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

主頁 > 知識庫 > Go每日一庫之dateparse處理時間

Go每日一庫之dateparse處理時間

熱門標簽:如何利用高德地圖標注家 400手機電話免費辦理 電腦外呼系統輻射大嗎 武漢百應人工智能電銷機器人 上海企業外呼系統排名 開通400電話申請流程 智能語音電銷的機器人 揚州電銷外呼系統軟件 百度地圖標注位置網站

簡介

不管什么時候,處理時間總是讓人頭疼的一件事情。因為時間格式太多樣化了,再加上時區,夏令時,閏秒這些細枝末節處理起來更是困難。所以在程序中,涉及時間的處理我們一般借助于標準庫或第三方提供的時間庫。今天要介紹的dateparse專注于一個很小的時間處理領域——解析日期時間格式的字符串。

快速使用

本文代碼使用 Go Modules。

創建目錄并初始化:

$ mkdir dateparse  cd dateparse
$ go mod init github.com/darjun/go-daily-lib/dateparse

安裝dateparse庫:

$ go get -u github.com/araddon/dateparse

使用:

package main

import (
  "fmt"
  "log"
  "github.com/araddon/dateparse"
)

func main() {
  t1, err := dateparse.ParseAny("3/1/2014")
  if err != nil {
    log.Fatal(err)
  }
  fmt.Println(t1.Format("2006-01-02 15:04:05"))

  t2, err := dateparse.ParseAny("mm/dd/yyyy")
  if err != nil {
    log.Fatal(err)
  }
  fmt.Println(t2.Format("2006-01-02 15:04:05"))
}

ParseAny()方法接受一個日期時間字符串,解析該字符串,返回time.Time類型的值。如果傳入的字符串dateparse庫無法識別,則返回一個錯誤。上面程序運行輸出:

$ go run main.go
2014-03-01 00:00:00
2021/06/24 14:52:39 Could not find format for "mm/dd/yyyy"
exit status 1

需要注意,當我們寫出"3/1/2014"這個時間的時候,可以解釋為2014年3月1日,也可以解釋為2014年1月3日。這就存在二義性,dateparse默認采用mm/dd/yyyy這種格式,也就是2014年3月1日。我們也可以使用ParseStrict()函數讓這種具有二義性的字符串解析失?。?br />

func main() {
  t, err := dateparse.ParseStrict("3/1/2014")
  if err != nil {
    log.Fatal(err)
  }
  fmt.Println(t.Format("2006-01-02 15:04:05"))
}

運行:

$ go run main.go
2021/06/24 14:57:18 This date has ambiguous mm/dd vs dd/mm type format
exit status 1

格式

dateparse支持豐富的日期時間格式,基本囊括了所有常用的格式。它支持標準庫time中預定義的所有格式:

// src/time/format.go
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"
)

支持的完整格式查看dateparse README。

時區

dateparse支持在特定時區解析日期時間字符串。我們可以通過調用標準庫的time.LoadLocation()方法,傳入時區標識字符串來獲得時區對象。時區標識字符串是類似Asia/Shanghai,America/Chicago這樣的格式,它表示一個具體的時區,前者上海,后者洛杉磯。調用dateparse.ParseIn()方法傳入時區對象,在指定時區中解析。time包中還預定義了兩個時區對象,time.Local表示本地時區,time.UTC表示 UTC 時區。時區的權威數據請看IANA。

func main() {
  tz1, _ := time.LoadLocation("America/Chicago")
  t1, _ := dateparse.ParseIn("2021-06-24 15:50:30", tz1)
  fmt.Println(t1.Local().Format("2006-01-02 15:04:05"))

  t2, _ := dateparse.ParseIn("2021-06-24 15:50:30", time.Local)
  fmt.Println(t2.Local().Format("2006-01-02 15:04:05"))
}

運行:

$ go run main.go
2021-06-25 04:50:30
2021-06-24 15:50:30

美國洛杉磯時區的"2021年6月24日 15時30分30秒"等于本地時區(北京時間)的"2021年6月25日 04時50分30秒"。

cli

dateparse還提供了一個命令行工具,用于極快地查看日期時間格式。安裝:

$ go install github.com/araddon/dateparse/dateparse

默認會安裝在$GOPATH路徑下,我習慣上把$GOPATH/bin放到$PATH中。所以dateparse命令可以直接使用。
dateparse命令接收一個字符串,和一個可選的時區選項:

$ dateparse --timezone="Asia/Shanghai" "2021-06-24 06:46:08"

Your Current time.Local zone is CST

Layout String: dateparse.ParseFormat() => 2006-01-02 15:04:05

Your Using time.Local set to location=Asia/Shanghai CST

+-------------+---------------------------+-------------------------------+-------------------------------------+
| method      | Zone Source               | Parsed                        | Parsed: t.In(time.UTC)              |
+-------------+---------------------------+-------------------------------+-------------------------------------+
| ParseAny    | time.Local = nil          | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC day=4 |
| ParseAny    | time.Local = timezone arg | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC day=4 |
| ParseAny    | time.Local = time.UTC     | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC day=4 |
| ParseIn     | time.Local = nil          | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC       |
| ParseIn     | time.Local = timezone arg | 2021-06-24 06:46:08 +0800 CST | 2021-06-23 22:46:08 +0000 UTC       |
| ParseIn     | time.Local = time.UTC     | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC       |
| ParseLocal  | time.Local = nil          | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC       |
| ParseLocal  | time.Local = timezone arg | 2021-06-24 06:46:08 +0800 CST | 2021-06-23 22:46:08 +0000 UTC       |
| ParseLocal  | time.Local = time.UTC     | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC       |
| ParseStrict | time.Local = nil          | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC       |
| ParseStrict | time.Local = timezone arg | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC       |
| ParseStrict | time.Local = time.UTC     | 2021-06-24 06:46:08 +0000 UTC | 2021-06-24 06:46:08 +0000 UTC       |
+-------------+---------------------------+-------------------------------+-------------------------------------+

輸出當前本地時區,格式字符串(可用于生成同樣格式的日期時間字符串)和一個表格。表格里面的數據是分別對ParseAny/ParseIn/ParseLocal/ParseStrict在不同的時區下調用的結果。

method列表示調用的方法,Zone Source列表示將本地時區設置的值,Parsed列是以日期時間字符串調用ParseAny()返回的time.Time對象的Format()方法調用結果,Parsed: t.In(time.UTC)列在返回的time.Time對象調用Format()方法前將其轉為 UTC 時間。

由于ParseAny/ParseStrict不會考慮本地時區,都是在 UTC 下解析字符串,所以這 6 行的最后兩列結果都一樣。

ParseIn的第二行,將time.Local設置為我們通過命令行選項設置的時區,上面我設置為Asia/Shanghai,對應的 UTC 時間相差 8 小時。ParseLocal也是如此。

下面是dateparse命令行的部分源碼,可以對照查看:

func main() {
  parsers := map[string]parser{
    "ParseAny":    parseAny,
    "ParseIn":     parseIn,
    "ParseLocal":  parseLocal,
    "ParseStrict": parseStrict,
  }

  for name, parser := range parsers {
    time.Local = nil
    table.AddRow(name, "time.Local = nil", parser(datestr, nil, false), parser(datestr, nil, true))
    if timezone != "" {
      time.Local = loc
      table.AddRow(name, "time.Local = timezone arg", parser(datestr, loc, false), parser(datestr, loc, true))
    }
    time.Local = time.UTC
    table.AddRow(name, "time.Local = time.UTC", parser(datestr, time.UTC, false), parser(datestr, time.UTC, true))
  }
}

func parseIn(datestr string, loc *time.Location, utc bool) string {
  t, err := dateparse.ParseIn(datestr, loc)
  if err != nil {
    return err.Error()
  }
  if utc {
    return t.In(time.UTC).String()
  }
  return t.String()
}

注意輸出的本地時區為 CST,它可以代表不同的時區:

Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00

CST 可以同時表示美國、澳大利亞、中國和古巴四個國家的標準時間。

總結

使用dateparse可以很方便地從日期時間字符串中解析出時間對象和格式(layout)。同時dateparse命令行可以快速的查看和轉換相應時區的時間,是一個非常不錯的小工具。

大家如果發現好玩、好用的 Go 語言庫,歡迎到 Go 每日一庫 GitHub 上提交 issue😄

參考

dateparse GitHub:https://github.com/araddon/dateparse
Go 每日一庫 GitHub:https://github.com/darjun/go-daily-lib

到此這篇關于Go每日一庫之dateparse處理時間的文章就介紹到這了,更多相關Go dateparse處理時間內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Go實現比較時間大小
  • go時間/時間戳操作大全(小結)
  • go語言中時間戳格式化的方法
  • golang時間、時區、格式的使用方法
  • go語言計算兩個時間的時間差方法
  • Golang記錄、計算函數執行耗時、運行時間的一個簡單方法
  • Golang獲取當前時間代碼

標簽:新余 張掖 宜賓 江西 武漢 延邊 黑龍江 嘉峪關

巨人網絡通訊聲明:本文標題《Go每日一庫之dateparse處理時間》,本文關鍵詞  每日,一庫,之,dateparse,處理,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go每日一庫之dateparse處理時間》相關的同類信息!
  • 本頁收集關于Go每日一庫之dateparse處理時間的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    色综合一个色综合亚洲| 成人午夜视频福利| 亚洲视频网在线直播| 51久久夜色精品国产麻豆| 国产精品正在播放| 亚洲一区自拍偷拍| 中文字幕永久在线不卡| 久久人人爽人人爽| 8x福利精品第一导航| av亚洲精华国产精华精华| 国产一区二区电影| 男男gaygay亚洲| 亚洲国产精品久久久久婷婷884 | 国产不卡在线视频| 免费久久精品视频| 亚洲国产日日夜夜| 亚洲va欧美va人人爽| 国产精品久久久久永久免费观看| 欧美肥胖老妇做爰| 欧美理论片在线| 欧美狂野另类xxxxoooo| 欧美日韩一区二区三区视频| 91福利精品第一导航| 99热这里都是精品| 97se亚洲国产综合自在线观| 成人免费观看视频| 99精品久久99久久久久| 99精品在线免费| 在线亚洲免费视频| 欧美熟乱第一页| 51精品秘密在线观看| 91精品国产色综合久久ai换脸| 6080午夜不卡| 久久午夜电影网| 欧美精品一区二区三区四区| wwwwxxxxx欧美| 久久久不卡网国产精品二区 | 久久青草欧美一区二区三区| 国产精品久久久久久久久图文区| 亚洲视频在线观看三级| 天涯成人国产亚洲精品一区av| 日本网站在线观看一区二区三区| 国产精品一品二品| 色中色一区二区| 日韩一卡二卡三卡| 亚洲欧美中日韩| 一区二区三区在线看| 色一情一伦一子一伦一区| 欧美亚洲一区二区在线观看| 久久亚洲一级片| 国产嫩草影院久久久久| 欧美精品在欧美一区二区少妇| 欧美午夜不卡视频| 久久无码av三级| 亚洲国产婷婷综合在线精品| 国产麻豆精品95视频| 91精彩视频在线观看| 日韩亚洲欧美在线观看| 日韩一区中文字幕| 国产在线一区二区综合免费视频| 99精品在线观看视频| 精品国产a毛片| 亚洲一级二级三级在线免费观看| 狠狠色2019综合网| 欧美日韩精品一区二区三区蜜桃| 国产亚洲欧美日韩日本| 日韩av一区二区三区四区| yourporn久久国产精品| 精品国产一区二区三区忘忧草| 亚洲综合成人网| 成人一区二区三区中文字幕| 欧美一区二区福利视频| 亚洲另类一区二区| 国产精品一区二区三区网站| 欧美日韩1区2区| 有坂深雪av一区二区精品| 国产精品一区二区在线看| 一本色道a无线码一区v| 国产日本欧美一区二区| 三级一区在线视频先锋| 成人午夜私人影院| 精品99999| 亚洲成年人网站在线观看| 一区二区三区欧美日| 国产一区亚洲一区| 91丨porny丨首页| 欧美一级淫片007| 亚洲精选一二三| 久久99这里只有精品| 国产伦精品一区二区三区免费 | 午夜精品一区二区三区三上悠亚| 另类小说欧美激情| 国产成人综合亚洲91猫咪| 91久久一区二区| 国产日韩欧美精品在线| 免费高清视频精品| 国产a精品视频| 精品久久国产老人久久综合| 亚洲永久精品国产| 国产成人欧美日韩在线电影| 91精品婷婷国产综合久久| 亚洲乱码国产乱码精品精98午夜| 国产精品一区二区你懂的| 精品视频一区二区三区免费| 欧美韩日一区二区三区| 国产精品一区二区三区乱码| 日韩欧美一二三四区| 亚洲另类春色校园小说| av一区二区三区黑人| 久久久电影一区二区三区| 老司机精品视频导航| 欧美午夜精品久久久久久超碰| 中文字幕一区二区三区在线观看| 国产一区二区三区黄视频 | 亚洲精品自拍动漫在线| 成人开心网精品视频| 久久久久久黄色| 久久成人免费网| 欧美哺乳videos| 亚洲午夜精品一区二区三区他趣| 久久66热偷产精品| 欧美一区二区三区爱爱| 视频在线在亚洲| 91麻豆精品国产91久久久久久| 亚洲综合激情另类小说区| 在线中文字幕一区| 日韩午夜精品电影| 日本欧美一区二区三区乱码 | 久久午夜羞羞影院免费观看| 日日摸夜夜添夜夜添亚洲女人| 欧美肥妇bbw| 精品在线免费视频| 91精品在线免费| 九九九久久久精品| 日韩三级av在线播放| 国产专区欧美精品| 国产精品毛片久久久久久久| 94-欧美-setu| 一区二区高清免费观看影视大全| 日本韩国精品在线| 亚洲日本在线视频观看| 成人精品一区二区三区中文字幕| 国产精品国产三级国产aⅴ中文| 91麻豆国产在线观看| 一区二区三区日韩欧美精品| 51精品秘密在线观看| 麻豆成人久久精品二区三区小说| 欧美一区二区三区播放老司机| 免费观看一级特黄欧美大片| 欧美精品一区二区三区一线天视频| 日韩在线一区二区三区| 久久婷婷综合激情| 一本久久精品一区二区| 五月天亚洲婷婷| 久久亚洲欧美国产精品乐播 | 亚洲老司机在线| 日韩一区二区免费电影| 国产盗摄精品一区二区三区在线| 国产精品国产三级国产aⅴ入口| 成人禁用看黄a在线| 一区二区三区蜜桃| 日韩精品一区二区三区老鸭窝| 国产伦精品一区二区三区在线观看| 中文字幕一区二区三区四区不卡 | 91色乱码一区二区三区| 亚洲成av人影院| 欧美日韩情趣电影| 国产精品综合网| 一区二区三区四区不卡在线| 日韩免费高清av| www.av精品| 日韩av一级片| 亚洲色图制服诱惑 | 久久精品久久综合| 国产欧美一区视频| 欧美乱妇15p| 99久久婷婷国产综合精品电影 | 337p亚洲精品色噜噜噜| 国产成人夜色高潮福利影视| 亚洲免费色视频| 久久日韩精品一区二区五区| 日本韩国精品在线| 国产精品1024久久| 婷婷亚洲久悠悠色悠在线播放| 在线观看av不卡| 夜夜精品浪潮av一区二区三区| 久久综合九色综合欧美就去吻 | 日韩av中文字幕一区二区三区| 国产欧美一区二区三区在线看蜜臀 | 婷婷开心激情综合| 成人欧美一区二区三区黑人麻豆 | 国产精品一二三| 亚洲精品综合在线| 久久综合国产精品| 欧美疯狂性受xxxxx喷水图片| 91欧美一区二区| 丁香婷婷深情五月亚洲| 另类人妖一区二区av| 国产性色一区二区| 国产亚洲精品bt天堂精选|