iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Go的dateparse处理时间
  • 387
分享到

Go的dateparse处理时间

2023-06-20 14:06:23 387人浏览 独家记忆
摘要

这篇文章主要讲解了“Go的dateparse处理时间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go的dateparse处理时间”吧!目录简介快速使用格式时区cli总结简介不管什么时候,处

这篇文章主要讲解了“Go的dateparse处理时间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go的dateparse处理时间”吧!

目录
  • 简介

  • 快速使用

  • 格式

  • 时区

  • cli

  • 总结

简介

不管什么时候,处理时间总是让人头疼的一件事情。因为时间格式太多样化了,再加上时区,夏令时,闰秒这些细枝末节处理起来更是困难。所以在程序中,涉及时间的处理我们一般借助于标准库或第三方提供的时间库。今天要介绍的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 mainimport (  "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()函数让这种具有二义性的字符串解析失败:

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.goconst (  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 CSTLayout String: dateparse.ParseFormat() => 2006-01-02 15:04:05Your 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的dateparse处理时间”的内容了,经过本文的学习后,相信大家对Go的dateparse处理时间这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Go的dateparse处理时间

本文链接: https://www.lsjlt.com/news/297196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go的dateparse处理时间
    这篇文章主要讲解了“Go的dateparse处理时间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go的dateparse处理时间”吧!目录简介快速使用格式时区cli总结简介不管什么时候,处...
    99+
    2023-06-20
  • Go每日一库之dateparse处理时间
    目录简介快速使用格式时区cli总结参考简介 不管什么时候,处理时间总是让人头疼的一件事情。因为时间格式太多样化了,再加上时区,夏令时,闰秒这些细枝末节处理起来更是困难。所以在程序中...
    99+
    2024-04-02
  • 详解Go 中的时间处理
    ​作为程序员,我们经常需要对时间进行处理。在 Go 中,标准库 time 提供了对应的能力。 本文将介绍 time 库中一些重要的函数和方法,希望能帮助到那些一遇到 Go 时间处理问...
    99+
    2024-04-02
  • 详解Go中处理时间数据的方法
    目录获取时间有没有更好的方法来格式化这个有一种更好的格式化时间的方法不同的时区呢您还可以从字符串中读取时间等等,什么是单调时钟结论在许多场合,你将不得不编写必须处理时间的代码。你可以...
    99+
    2023-05-16
    Go处理时间数据 Go处理数据 Go 时间数据 Go 时间
  • Python时间处理
    Python时间处理# _*_ coding: utf-8 _*_ import time import calendar import datetime # time模块中的三种时间形式 print("time stamp:", t...
    99+
    2023-01-31
    时间 Python
  • Go语言时间处理必备技巧全解析
    目录1. 时间的表示2. 时间的计算3. 时间的比较4. 定时器和 Ticker5. 时区和时间格式化6. 定时任务7. 总结1. 时间的表示 Go 语言中时间的表示方式是通过 ti...
    99+
    2023-05-18
    Go语言时间处理技巧 Go语言时间处理 Go 时间处理
  • python时间处理之date
    #!/usr/bin/python # -*- coding:utf-8 -*- """ date的用法 (test_datetime.py) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...
    99+
    2023-01-31
    时间 python date
  • Python 日期时间处理
    开发过程中最常用的时间处理就是获取时间戳,获取当前日期,或者时间戳,日期互转,做个总结,免得总找不着。1、获取当前timestamp>>> from time import time >>> time()...
    99+
    2023-01-31
    日期 时间 Python
  • python处理时间加减
    最近用python做pv和uv数据统计分析时,原始日志文件中用户访问的时间不对,需要往后延8小时,记录一下:>>> import datetime >>> pageTime = '2014-05-11 1...
    99+
    2023-01-31
    加减 时间 python
  • PHP时间处理异常:返回时间出错
    PHP时间处理异常:返回时间出错,需要具体代码示例 在Web开发中,对时间的处理是一个很常见的需求。PHP作为一种常用的服务器端脚本语言,提供了丰富的时间处理函数和方法。然而,在实际应...
    99+
    2024-04-02
  • Yii框架的时空扭曲:时间戳、日期和时间处理
    时间戳是一个整数,表示自纪元时间(Unix纪元,1970年1月1日午夜 UTC)以来的秒数。Yii中提供了获取和使用时间戳的便捷方法: time(): 返回当前时间戳。 date("U"): 以字符串格式返回当前时间戳。 strtoti...
    99+
    2024-04-02
  • Java 进行时间处理的步骤
    目录一、Calendar (1)、Calender介绍 (2)、简单的日期使用(3)、与Date之间的转换二、Apache下的DateUtils 三、JDK1.8新增的日期API L...
    99+
    2024-04-02
  • Java8中的时区日期时间怎么处理
    今天小编给大家分享一下Java8中的时区日期时间怎么处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。我同时也发现,这三个类...
    99+
    2023-07-05
  • Python处理时间戳和时间计算等的脚本分享
    由于实际需要,简要写了个小脚本,并打包生成exe,供无网络环境下使用 脚本1:显示当前时间与时间戳,以及10分钟后的时间与时间戳 # -*- coding: utf-8 -*- "...
    99+
    2024-04-02
  • 怎么利用moment处理时间戳并计算时间的差值
    这篇“怎么利用moment处理时间戳并计算时间的差值”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么利用moment处理时...
    99+
    2023-06-30
  • 如何利用moment处理时间戳并计算时间的差值
    项目使用nodejs写服务端,有个功能就是统计代理服务器流量,然后把统计的数据通过echarts渲染到页面。 当然统计数据这里用到了 定时器,在使用的是 var schedul...
    99+
    2024-04-02
  • Pandas中时间序列的处理方法
    这篇文章主要为大家展示了“Pandas中时间序列的处理方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Pandas中时间序列的处理方法”这篇文章吧。一、时间序列数据的生成pd.date_ran...
    99+
    2023-06-15
  • 如何搞懂Java8中的时间处理
    今天就跟大家聊聊有关如何搞懂Java8中的时间处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言java8借鉴了第三方日期库joda很多的优点java.time包类名描述Inst...
    99+
    2023-06-26
  • vue中对时间戳的处理方式
    目录vue对时间戳的处理1、自建js文件2、在组件模板中引用定义好的时间戳函数3、设置好在script中的引用和定义vue时间戳转换vue对时间戳的处理 1、自建js文件 文件位置根...
    99+
    2024-04-02
  • Oracle中的时间戳和时区是如何处理的
    在Oracle中,时间戳是以特定格式存储日期和时间信息的数据类型。时区信息在Oracle中是通过数据库会话参数来管理的。 当存储时间...
    99+
    2024-04-09
    Oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作