如何在命令行上将日期字符串转换为当前时区?

如何在命令行上将日期字符串转换为当前时区?

如何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

相关内容