如何2011-11-13 08:11:02 +0000
在命令行上将日期/时间字符串(例如)转换为我的本地时区?
答案1
使用date -jf "<input format>" "<input value>" +"<output format>"
。
以下将 UTC 日期转换为我的本地时区 (CET):
$ date -jf "%Y-%m-%d %H:%M:%S %z" "2011-11-13 08:11:02 +0000" +"%Y_%m_%d__%H_%M_%S"
2011_11_13__09_11_02
如果您为输入和输出指定相同的日期格式,则只会将时间转换为本地时区。但是,如示例中所示,您可以将其与格式转换相结合。
答案2
如果您像我一样总是忘记日期选项,这里有一个基于 Daniel Beck 的回答的函数,您可以将其添加到您的.profile
或.zshrc
等中。
我发现自己经常需要从两种不同的日期格式进行转换,因此第一行尝试转换一种格式,如果失败,它就会消除错误并尝试另一种格式。
utcdate() {
# first try Apache access log format
date -jf "%d/%b/%Y %H:%M:%S %z" "$* +0000" +"%Y-%m-%d %H:%M:%S %Z" 2>/dev/null ||
# second try MySQL style
date -jf "%Y-%m-%d %H:%M:%S %z" "$* +0000" +"%Y-%m-%d %H:%M:%S %Z"
}
然后你可以像这样运行它:
utcdate 25/Sep/2023 18:40:20