我尝试了一些转换方法,但都失败了。我无法正确解释输入日期格式。
以下是我用来转换的命令
date -j -u -f "%a %b %d %T %Z %Y" "Tue Sep 28 19:35:15 EDT 2010" "+%s"
我正在寻找适用于每个时区的命令
答案 0 :(得分:2)
通过阅读this帖子我发现的第一个问题。它解释说,为了让你的命令工作,缩写需要使用系统语言。这可以通过在命令前添加LANG=C
来解决。
但是,您的命令仍然传递了以下错误:
Failed conversion of ``Tue Sep 28 19:35:15 EDT 2010'' using format ``%a %b %d %T %Z %Y''
date: illegal time format
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
然后,在查看man date
时,我发现这行解释了-f参数:
-f 使用input_fmt作为格式字符串来解析提供的new_date而不是使用默认值 [[[mm] dd] HH] MM [[cc] yy] [.ss]格式。使用 strptime(3)进行解析。
然后,在man strptime
我读到:
错误 - %Z格式说明符只接受时区缩写 本地的 时区,或价值" GMT"。这种限制是因为含糊不清 由于时区缩写的过载。一个这样的例子 EST是东部标准时间和东澳大利亚夏季 时间。
所以,我能够像这样执行你的命令:
LANG=C date -j -u -f '%a %b %d %T %Z %Y' 'Tue Sep 28 19:35:15 GMT 2010' +%s
或者,就像这样,
TZ=EDT LANG=C date -j -u -f '%a %b %d %T %Z %Y' 'Tue Sep 28 19:35:15 GMT 2010' +%s
但实际上两者并不是你想要的东西......
因此,您似乎被strptime的默认macOS版本中的已知错误所咬。
修改强>
但是,如果你有一个包含每个时区偏移量的列表(偏向GMT),你可以这样做:
TZ=EDT LANG=C date -juf '%a %b %d %T %z %Y' 'Tue Sep 28 19:35:15 -0400 2010' +%s
了解更多可能性this post。