分享
golang实现任意日期格式转换标准日期格式
诺唯 · · 7655 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
Fork了别人一个Repository 日期解析
这个package的功能很简单就是将一个未知的日期格式转化为标准的日期格式,日常生活中可以作为日期的数据清洗,接下来将开发以此Repository为基础,支持可配置的自动识别日期格式的功能,Repository正在开发中,有兴趣的小伙伴可以随时提PR,共同完善,共同学习。
Repository地址: noaway/dateparse
具体的使用方式如下:
package main
import (
"flag"
"fmt"
"time"
"github.com/apcera/termtables"
"github.com/noaway/dateparse"
)
// _ _
// | | | |
// __| | __ _ | |_ ___ _ __ __ _ _ __ ___ ___
// / _` | / _` | | __| / _ \ | '_ \ / _` | | '__| / __| / _ \
// | (_| | | (_| | | |_ | __/ | |_) | | (_| | | | \__ \ | __/
// \__,_| \__,_| \__| \___| | .__/ \__,_| |_| |___/ \___|
// | |
// |_|
var examples = []string{
"May 8, 2009 5:57:51 PM",
"Nov 8, 2017",
"Mon Jan 2 15:04:05 2006",
"Mon Jan 2 15:04:05 MST 2006",
"Mon Jan 02 15:04:05 -0700 2006",
"Monday, 02-Jan-06 15:04:05 MST",
"Mon, 02 Jan 2006 15:04:05 MST",
"Tue, 11 Jul 2017 16:28:13 +0200 (CEST)",
"Mon, 02 Jan 2006 15:04:05 -0700",
"Mon Aug 10 15:44:11 UTC+0100 2015",
"Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
"12 Feb 2006, 19:17",
"2013-Feb-03",
// mm/dd/yy
"3/31/2014",
"03/31/2014",
"08/21/71",
"8/1/71",
"4/8/2014 22:05",
"04/08/2014 22:05",
"04/2/2014 03:00:51",
"8/8/1965 12:00:00 AM",
"8/8/1965 01:00:01 PM",
"8/8/1965 01:00 PM",
"8/8/1965 1:00 PM",
"8/8/1965 12:00 AM",
"4/02/2014 03:00:51",
"03/19/2012 10:11:59",
"03/19/2012 10:11:59.3186369",
// yyyy/mm/dd
"2014/3/31",
"2014/03/31",
"2014/4/8 22:05",
"2014/04/08 22:05",
"2014/04/2 03:00:51",
"2014/4/02 03:00:51",
"2012/03/19 10:11:59",
"2012/03/19 10:11:59.3186369",
// yyyy-mm-ddThh
"2006-01-02T15:04:05+0000",
"2009-08-12T22:15:09-07:00",
"2009-08-12T22:15:09",
"2009-08-12T22:15:09Z",
// yyyy-mm-dd hh:mm:ss
"2014-04-26 17:24:37.3186369",
"2012-08-03 18:31:59.257000000",
"2014-04-26 17:24:37.123",
"2013-04-01 22:43:22",
"2014-12-16 06:20:00 UTC",
"2014-12-16 06:20:00 GMT",
"2014-04-26 05:24:37 PM",
"2014-04-26 13:13:43 +0800",
"2014-04-26 13:13:44 +09:00",
"2012-08-03 18:31:59.257000000 +0000 UTC",
"2015-09-30 18:48:56.35272715 +0000 UTC",
"2015-02-18 00:12:00 +0000 GMT",
"2015-02-18 00:12:00 +0000 UTC",
"2017-07-19 03:21:51+00:00",
"2014-04-26",
"2014-04",
"2014",
"2014-05-11 08:20:13,787",
// yyyymmdd and similar
"20140601",
// unix seconds, ms
"1332151919",
"1384216367189",
// Chinese date
"2017年11月09日",
"2017年11月01日 09:41",
// How long ago
"1 day ago",
"19 hours ago",
"26 minutes ago",
}
var (
timezone = ""
)
func main() {
flag.StringVar(&timezone, "timezone", "UTC", "Timezone aka `America/Los_Angeles` formatted time-zone")
flag.Parse()
if timezone != "" {
// NOTE: This is very, very important to understand
// time-parsing in go
loc, err := time.LoadLocation(timezone)
if err != nil {
panic(err.Error())
}
time.Local = loc
}
table := termtables.CreateTable()
table.AddHeaders("Input", "Parsed, and Output as %v")
for _, dateExample := range examples {
// t, err := dateparse.ParseLocal(dateExample)
t, err := dateparse.ParseAny(dateExample)
if err != nil {
panic(err.Error())
}
table.AddRow(dateExample, fmt.Sprintf("%v", t))
}
fmt.Println(table.Render())
}
返回样例结果:
+-------------------------------------------------------+------------------------------------------------------------+
| Input | Parsed, and Output as %v |
+-------------------------------------------------------+------------------------------------------------------------+
| May 8, 2009 5:57:51 PM | 2009年05月08日 17:57:51 +0000 UTC |
| Nov 8, 2017 | 2017年11月08日 00:00:00 +0000 UTC |
| Mon Jan 2 15:04:05 2006 | 2006年01月02日 15:04:05 +0000 UTC |
| Mon Jan 2 15:04:05 MST 2006 | 2006年01月02日 15:04:05 +0000 MST |
| Mon Jan 02 15:04:05 -0700 2006 | 2006年01月02日 15:04:05 -0700 -0700 |
| Monday, 02-Jan-06 15:04:05 MST | 2006年01月02日 15:04:05 +0000 MST |
| 2006年1月02日 15:04:05 MST | 2006年01月02日 15:04:05 +0000 MST |
| 2017年7月11日 16:28:13 +0200 (CEST) | 2017年07月11日 16:28:13 +0200 +0200 |
| 2006年1月02日 15:04:05 -0700 | 2006年01月02日 15:04:05 -0700 -0700 |
| Mon Aug 10 15:44:11 UTC+0100 2015 | 2015年08月10日 15:44:11 +0000 UTC |
| Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015年07月03日 18:04:07 +0100 GMT |
| 12 Feb 2006, 19:17 | 2006年02月12日 19:17:00 +0000 UTC |
| 2013-Feb-03 | 2013年02月03日 00:00:00 +0000 UTC |
| 3/31/2014 | 2014年03月31日 00:00:00 +0000 UTC |
| 03/31/2014 | 2014年03月31日 00:00:00 +0000 UTC |
| 08/21/71 | 1971年08月21日 00:00:00 +0000 UTC |
| 8/1/71 | 1971年08月01日 00:00:00 +0000 UTC |
| 4/8/2014 22:05 | 2014年04月08日 22:05:00 +0000 UTC |
| 04/08/2014 22:05 | 2014年04月08日 22:05:00 +0000 UTC |
| 04/2/2014 03:00:51 | 2014年04月02日 03:00:51 +0000 UTC |
| 8/8/1965 12:00:00 AM | 1965年08月08日 00:00:00 +0000 UTC |
| 8/8/1965 01:00:01 PM | 1965年08月08日 13:00:01 +0000 UTC |
| 8/8/1965 01:00 PM | 1965年08月08日 13:00:00 +0000 UTC |
| 8/8/1965 1:00 PM | 1965年08月08日 13:00:00 +0000 UTC |
| 8/8/1965 12:00 AM | 1965年08月08日 00:00:00 +0000 UTC |
| 4/02/2014 03:00:51 | 2014年04月02日 03:00:51 +0000 UTC |
| 03/19/2012 10:11:59 | 2012年03月19日 10:11:59 +0000 UTC |
| 03/19/2012 10:11:59.3186369 | 2012年03月19日 10:11:59.3186369 +0000 UTC |
| 2014年3月31日 | 2014年03月31日 00:00:00 +0000 UTC |
| 2014年03月31日 | 2014年03月31日 00:00:00 +0000 UTC |
| 2014年4月8日 22:05 | 2014年04月08日 22:05:00 +0000 UTC |
| 2014年04月08日 22:05 | 2014年04月08日 22:05:00 +0000 UTC |
| 2014年04月2日 03:00:51 | 2014年04月02日 03:00:51 +0000 UTC |
| 2014年4月02日 03:00:51 | 2014年04月02日 03:00:51 +0000 UTC |
| 2012年03月19日 10:11:59 | 2012年03月19日 10:11:59 +0000 UTC |
| 2012年03月19日 10:11:59.3186369 | 2012年03月19日 10:11:59.3186369 +0000 UTC |
| 2006年01月02日T15:04:05+0000 | 2006年01月02日 15:04:05 +0000 UTC |
| 2009年08月12日T22:15:09-07:00 | 2009年08月12日 22:15:09 -0700 -0700 |
| 2009年08月12日T22:15:09 | 2009年08月12日 22:15:09 +0000 UTC |
| 2009年08月12日T22:15:09Z | 2009年08月12日 22:15:09 +0000 UTC |
| 2014年04月26日 17:24:37.3186369 | 2014年04月26日 17:24:37.3186369 +0000 UTC |
| 2012年08月03日 18:31:59.257000000 | 2012年08月03日 18:31:59.257 +0000 UTC |
| 2014年04月26日 17:24:37.123 | 2014年04月26日 17:24:37.123 +0000 UTC |
| 2013年04月01日 22:43:22 | 2013年04月01日 22:43:22 +0000 UTC |
| 2014年12月16日 06:20:00 UTC | 2014年12月16日 06:20:00 +0000 UTC |
| 2014年12月16日 06:20:00 GMT | 2014年12月16日 06:20:00 +0000 UTC |
| 2014年04月26日 05:24:37 PM | 2014年04月26日 17:24:37 +0000 UTC |
| 2014年04月26日 13:13:43 +0800 | 2014年04月26日 13:13:43 +0800 +0800 |
| 2014年04月26日 13:13:44 +09:00 | 2014年04月26日 13:13:44 +0900 +0900 |
| 2012年08月03日 18:31:59.257000000 +0000 UTC | 2012年08月03日 18:31:59.257 +0000 UTC |
| 2015年09月30日 18:48:56.35272715 +0000 UTC | 2015年09月30日 18:48:56.35272715 +0000 UTC |
| 2015年02月18日 00:12:00 +0000 GMT | 2015年02月18日 00:12:00 +0000 UTC |
| 2015年02月18日 00:12:00 +0000 UTC | 2015年02月18日 00:12:00 +0000 UTC |
| 2017年07月19日 03:21:51+00:00 | 2017年07月19日 03:21:51 +0000 UTC |
| 2014年04月26日 | 2014年04月26日 00:00:00 +0000 UTC |
| 2014-04 | 2014年04月01日 00:00:00 +0000 UTC |
| 2014 | 2014年01月01日 00:00:00 +0000 UTC |
| 2014年05月11日 08:20:13,787 | 2014年05月11日 08:20:13.787 +0000 UTC |
| 20140601 | 2014年06月01日 00:00:00 +0000 UTC |
| 1332151919 | 2012年03月19日 10:11:59 +0000 UTC |
| 1384216367189 | 2013年11月12日 00:32:47.189 +0000 UTC |
| 2017年11月09日 | 2017年11月09日 00:00:00 +0000 UTC |
| 2017年11月01日 09:41 | 2017年11月01日 09:41:00 +0000 UTC |
| 1 day ago | 2017年11月08日 11:07:30.982877633 +0000 UTC m=-86399.999181941 |
| 19 hours ago | 2017年11月08日 16:07:30.982880364 +0000 UTC m=-68399.999179210 |
| 26 minutes ago | 2017年11月09日 10:41:30.982884592 +0000 UTC m=-1559.999174982 |
+-------------------------------------------------------+------------------------------------------------------------+
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信7655 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
Fork了别人一个Repository 日期解析
这个package的功能很简单就是将一个未知的日期格式转化为标准的日期格式,日常生活中可以作为日期的数据清洗,接下来将开发以此Repository为基础,支持可配置的自动识别日期格式的功能,Repository正在开发中,有兴趣的小伙伴可以随时提PR,共同完善,共同学习。
Repository地址: noaway/dateparse
具体的使用方式如下:
package main
import (
"flag"
"fmt"
"time"
"github.com/apcera/termtables"
"github.com/noaway/dateparse"
)
// _ _
// | | | |
// __| | __ _ | |_ ___ _ __ __ _ _ __ ___ ___
// / _` | / _` | | __| / _ \ | '_ \ / _` | | '__| / __| / _ \
// | (_| | | (_| | | |_ | __/ | |_) | | (_| | | | \__ \ | __/
// \__,_| \__,_| \__| \___| | .__/ \__,_| |_| |___/ \___|
// | |
// |_|
var examples = []string{
"May 8, 2009 5:57:51 PM",
"Nov 8, 2017",
"Mon Jan 2 15:04:05 2006",
"Mon Jan 2 15:04:05 MST 2006",
"Mon Jan 02 15:04:05 -0700 2006",
"Monday, 02-Jan-06 15:04:05 MST",
"Mon, 02 Jan 2006 15:04:05 MST",
"Tue, 11 Jul 2017 16:28:13 +0200 (CEST)",
"Mon, 02 Jan 2006 15:04:05 -0700",
"Mon Aug 10 15:44:11 UTC+0100 2015",
"Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
"12 Feb 2006, 19:17",
"2013-Feb-03",
// mm/dd/yy
"3/31/2014",
"03/31/2014",
"08/21/71",
"8/1/71",
"4/8/2014 22:05",
"04/08/2014 22:05",
"04/2/2014 03:00:51",
"8/8/1965 12:00:00 AM",
"8/8/1965 01:00:01 PM",
"8/8/1965 01:00 PM",
"8/8/1965 1:00 PM",
"8/8/1965 12:00 AM",
"4/02/2014 03:00:51",
"03/19/2012 10:11:59",
"03/19/2012 10:11:59.3186369",
// yyyy/mm/dd
"2014/3/31",
"2014/03/31",
"2014/4/8 22:05",
"2014/04/08 22:05",
"2014/04/2 03:00:51",
"2014/4/02 03:00:51",
"2012/03/19 10:11:59",
"2012/03/19 10:11:59.3186369",
// yyyy-mm-ddThh
"2006-01-02T15:04:05+0000",
"2009-08-12T22:15:09-07:00",
"2009-08-12T22:15:09",
"2009-08-12T22:15:09Z",
// yyyy-mm-dd hh:mm:ss
"2014-04-26 17:24:37.3186369",
"2012-08-03 18:31:59.257000000",
"2014-04-26 17:24:37.123",
"2013-04-01 22:43:22",
"2014-12-16 06:20:00 UTC",
"2014-12-16 06:20:00 GMT",
"2014-04-26 05:24:37 PM",
"2014-04-26 13:13:43 +0800",
"2014-04-26 13:13:44 +09:00",
"2012-08-03 18:31:59.257000000 +0000 UTC",
"2015-09-30 18:48:56.35272715 +0000 UTC",
"2015-02-18 00:12:00 +0000 GMT",
"2015-02-18 00:12:00 +0000 UTC",
"2017-07-19 03:21:51+00:00",
"2014-04-26",
"2014-04",
"2014",
"2014-05-11 08:20:13,787",
// yyyymmdd and similar
"20140601",
// unix seconds, ms
"1332151919",
"1384216367189",
// Chinese date
"2017年11月09日",
"2017年11月01日 09:41",
// How long ago
"1 day ago",
"19 hours ago",
"26 minutes ago",
}
var (
timezone = ""
)
func main() {
flag.StringVar(&timezone, "timezone", "UTC", "Timezone aka `America/Los_Angeles` formatted time-zone")
flag.Parse()
if timezone != "" {
// NOTE: This is very, very important to understand
// time-parsing in go
loc, err := time.LoadLocation(timezone)
if err != nil {
panic(err.Error())
}
time.Local = loc
}
table := termtables.CreateTable()
table.AddHeaders("Input", "Parsed, and Output as %v")
for _, dateExample := range examples {
// t, err := dateparse.ParseLocal(dateExample)
t, err := dateparse.ParseAny(dateExample)
if err != nil {
panic(err.Error())
}
table.AddRow(dateExample, fmt.Sprintf("%v", t))
}
fmt.Println(table.Render())
}
返回样例结果:
+-------------------------------------------------------+------------------------------------------------------------+
| Input | Parsed, and Output as %v |
+-------------------------------------------------------+------------------------------------------------------------+
| May 8, 2009 5:57:51 PM | 2009年05月08日 17:57:51 +0000 UTC |
| Nov 8, 2017 | 2017年11月08日 00:00:00 +0000 UTC |
| Mon Jan 2 15:04:05 2006 | 2006年01月02日 15:04:05 +0000 UTC |
| Mon Jan 2 15:04:05 MST 2006 | 2006年01月02日 15:04:05 +0000 MST |
| Mon Jan 02 15:04:05 -0700 2006 | 2006年01月02日 15:04:05 -0700 -0700 |
| Monday, 02-Jan-06 15:04:05 MST | 2006年01月02日 15:04:05 +0000 MST |
| 2006年1月02日 15:04:05 MST | 2006年01月02日 15:04:05 +0000 MST |
| 2017年7月11日 16:28:13 +0200 (CEST) | 2017年07月11日 16:28:13 +0200 +0200 |
| 2006年1月02日 15:04:05 -0700 | 2006年01月02日 15:04:05 -0700 -0700 |
| Mon Aug 10 15:44:11 UTC+0100 2015 | 2015年08月10日 15:44:11 +0000 UTC |
| Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015年07月03日 18:04:07 +0100 GMT |
| 12 Feb 2006, 19:17 | 2006年02月12日 19:17:00 +0000 UTC |
| 2013-Feb-03 | 2013年02月03日 00:00:00 +0000 UTC |
| 3/31/2014 | 2014年03月31日 00:00:00 +0000 UTC |
| 03/31/2014 | 2014年03月31日 00:00:00 +0000 UTC |
| 08/21/71 | 1971年08月21日 00:00:00 +0000 UTC |
| 8/1/71 | 1971年08月01日 00:00:00 +0000 UTC |
| 4/8/2014 22:05 | 2014年04月08日 22:05:00 +0000 UTC |
| 04/08/2014 22:05 | 2014年04月08日 22:05:00 +0000 UTC |
| 04/2/2014 03:00:51 | 2014年04月02日 03:00:51 +0000 UTC |
| 8/8/1965 12:00:00 AM | 1965年08月08日 00:00:00 +0000 UTC |
| 8/8/1965 01:00:01 PM | 1965年08月08日 13:00:01 +0000 UTC |
| 8/8/1965 01:00 PM | 1965年08月08日 13:00:00 +0000 UTC |
| 8/8/1965 1:00 PM | 1965年08月08日 13:00:00 +0000 UTC |
| 8/8/1965 12:00 AM | 1965年08月08日 00:00:00 +0000 UTC |
| 4/02/2014 03:00:51 | 2014年04月02日 03:00:51 +0000 UTC |
| 03/19/2012 10:11:59 | 2012年03月19日 10:11:59 +0000 UTC |
| 03/19/2012 10:11:59.3186369 | 2012年03月19日 10:11:59.3186369 +0000 UTC |
| 2014年3月31日 | 2014年03月31日 00:00:00 +0000 UTC |
| 2014年03月31日 | 2014年03月31日 00:00:00 +0000 UTC |
| 2014年4月8日 22:05 | 2014年04月08日 22:05:00 +0000 UTC |
| 2014年04月08日 22:05 | 2014年04月08日 22:05:00 +0000 UTC |
| 2014年04月2日 03:00:51 | 2014年04月02日 03:00:51 +0000 UTC |
| 2014年4月02日 03:00:51 | 2014年04月02日 03:00:51 +0000 UTC |
| 2012年03月19日 10:11:59 | 2012年03月19日 10:11:59 +0000 UTC |
| 2012年03月19日 10:11:59.3186369 | 2012年03月19日 10:11:59.3186369 +0000 UTC |
| 2006年01月02日T15:04:05+0000 | 2006年01月02日 15:04:05 +0000 UTC |
| 2009年08月12日T22:15:09-07:00 | 2009年08月12日 22:15:09 -0700 -0700 |
| 2009年08月12日T22:15:09 | 2009年08月12日 22:15:09 +0000 UTC |
| 2009年08月12日T22:15:09Z | 2009年08月12日 22:15:09 +0000 UTC |
| 2014年04月26日 17:24:37.3186369 | 2014年04月26日 17:24:37.3186369 +0000 UTC |
| 2012年08月03日 18:31:59.257000000 | 2012年08月03日 18:31:59.257 +0000 UTC |
| 2014年04月26日 17:24:37.123 | 2014年04月26日 17:24:37.123 +0000 UTC |
| 2013年04月01日 22:43:22 | 2013年04月01日 22:43:22 +0000 UTC |
| 2014年12月16日 06:20:00 UTC | 2014年12月16日 06:20:00 +0000 UTC |
| 2014年12月16日 06:20:00 GMT | 2014年12月16日 06:20:00 +0000 UTC |
| 2014年04月26日 05:24:37 PM | 2014年04月26日 17:24:37 +0000 UTC |
| 2014年04月26日 13:13:43 +0800 | 2014年04月26日 13:13:43 +0800 +0800 |
| 2014年04月26日 13:13:44 +09:00 | 2014年04月26日 13:13:44 +0900 +0900 |
| 2012年08月03日 18:31:59.257000000 +0000 UTC | 2012年08月03日 18:31:59.257 +0000 UTC |
| 2015年09月30日 18:48:56.35272715 +0000 UTC | 2015年09月30日 18:48:56.35272715 +0000 UTC |
| 2015年02月18日 00:12:00 +0000 GMT | 2015年02月18日 00:12:00 +0000 UTC |
| 2015年02月18日 00:12:00 +0000 UTC | 2015年02月18日 00:12:00 +0000 UTC |
| 2017年07月19日 03:21:51+00:00 | 2017年07月19日 03:21:51 +0000 UTC |
| 2014年04月26日 | 2014年04月26日 00:00:00 +0000 UTC |
| 2014-04 | 2014年04月01日 00:00:00 +0000 UTC |
| 2014 | 2014年01月01日 00:00:00 +0000 UTC |
| 2014年05月11日 08:20:13,787 | 2014年05月11日 08:20:13.787 +0000 UTC |
| 20140601 | 2014年06月01日 00:00:00 +0000 UTC |
| 1332151919 | 2012年03月19日 10:11:59 +0000 UTC |
| 1384216367189 | 2013年11月12日 00:32:47.189 +0000 UTC |
| 2017年11月09日 | 2017年11月09日 00:00:00 +0000 UTC |
| 2017年11月01日 09:41 | 2017年11月01日 09:41:00 +0000 UTC |
| 1 day ago | 2017年11月08日 11:07:30.982877633 +0000 UTC m=-86399.999181941 |
| 19 hours ago | 2017年11月08日 16:07:30.982880364 +0000 UTC m=-68399.999179210 |
| 26 minutes ago | 2017年11月09日 10:41:30.982884592 +0000 UTC m=-1559.999174982 |
+-------------------------------------------------------+------------------------------------------------------------+