我有一个以下格式的日期字符串,Jul 27 23:59:59 2016 GMT我需要使用OS X BSD date命令将其转换为等效的纪元时间戳.
GNU date有一个很好的-d/ --date=STRING参数:
$ date -d "Jul 27 23:59:59 2016 GMT" +'%s'
1469663999
Run Code Online (Sandbox Code Playgroud)
dateOSX上的BSD 命令遗憾地没有这样的选项.
date -j -f "<FORMAT>" "Jul 27 23:59:59 2016 GMT" +'%s'似乎是要走的路,但我找不到写格式字符串.Apple的手册页指出:
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
can be used to parse the output from date and express it in Epoch time.
Run Code Online (Sandbox Code Playgroud)
但这似乎并非如此:
$ date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
Failed conversion of ``Wed 13 Jul 2016 11:17:49 BST'' using format ``%a %b %d %T %Z %Y''
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Run Code Online (Sandbox Code Playgroud)
如何使用OS X BSD date命令将此格式的日期字符串转换为纪元时间戳?
我似乎无法获得一个版本date,但我在OS X 10.11.5(El Capitan),如果这是重要的.
你是说这个吗?
date -j -f "%a %b %d %T %Z %Y" "Wed Jul 13 11:30:27 BST 2016" +"%s"
1468405827
Run Code Online (Sandbox Code Playgroud)
我通过告诉date您输出的格式与您使用的格式相同来解决这个问题:
date -j +"%a %b %d %T %Z %Y"
Run Code Online (Sandbox Code Playgroud)
您的date命令以以下格式输出日期:
Wed 13 Jul 2016 11:17:49 BST (Format sequence is: "%a %d %b %Y %T %Z")
Run Code Online (Sandbox Code Playgroud)
并且您尝试使用表达式来解析它以匹配以下格式:
Wed Jul 13 11:17:49 BST 2016 (Format sequence is: "%a %b %d %T %Z %Y")
Run Code Online (Sandbox Code Playgroud)
导致:
使用格式“%a %b %d %T %Z %Y ”转换“Wed 13 Jul 2016 11:17:49 BST”失败
因此,基本上,您需要使用以下命令更改命令中的格式顺序:
$ date -j -f "%a %d %b %Y %T %Z" "`date`" +"%s"
Run Code Online (Sandbox Code Playgroud)
为了匹配Wed 13 Jul 2016 11:17:49 BST您的date命令默认输出的格式。
要使用基于相同格式的自定义日期:
$ date -j -f "%a %d %b %Y %T %Z" "Wed 13 Jul 2016 11:17:49 BST" +"%s"
Run Code Online (Sandbox Code Playgroud)
关于[某些]格式字符串序列含义的一些参考:
小智 5
我在尝试将datetime类似于epoch. 我想我也会把这个格式放在这里。
date -j -f "%Y-%m-%d %H:%M:%S" "2018-01-30 15:58:50" "+%s"
1517349530
| 归档时间: |
|
| 查看次数: |
5666 次 |
| 最近记录: |