【发布时间】:2011-04-18 13:55:33
【问题描述】:
在 Linux 上,您可以将诸如“2010-10-02”之类的日期转换为 shell 脚本中的 unix 时间戳
date -d "2010-10-02" "+%s"
由于 Mac OS 没有对应于 date 的等效 -d。如何在 shell 脚本中将日期转换为 unix 时间戳。
【问题讨论】:
在 Linux 上,您可以将诸如“2010-10-02”之类的日期转换为 shell 脚本中的 unix 时间戳
date -d "2010-10-02" "+%s"
由于 Mac OS 没有对应于 date 的等效 -d。如何在 shell 脚本中将日期转换为 unix 时间戳。
【问题讨论】:
date +%s
这对我在 OS X Lion 上运行良好。
【讨论】:
date +%s 将只使用当前日期。
man date on OSX 有这个例子
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
我认为可以满足您的需求。
您可以在特定日期使用它
date -j -f "%a %b %d %T %Z %Y" "Tue Sep 28 19:35:15 EDT 2010" "+%s"
或者使用任何你想要的格式。
【讨论】:
date +%Y%m%d date -j -f "%a %b %d %T %Z %Y" "$ {currDate}" "+%s"
PDT 所以在上面的命令中,改变EDT 和PDT 对我有用。
date -j -f "%Y-%m-%d" "2010-10-02" "+%s"
【讨论】:
我在 Mac OSX 上使用了以下内容。
currDate=`date +%Y%m%d`
epochDate=$(date -j -f "%Y%m%d" "${currDate}" "+%s")
【讨论】:
您也可以像这样安装 GNU date:
brew install coreutilsalias date="/usr/local/bin/gdate"
date +%s
1547838127评论说 Mac 必须“与众不同”只是表明评论者对 UNIX 的历史一无所知。 macOS 基于 BSD UNIX,它比 Linux 更早。 Linux 本质上是其他 UNIX 系统的副本,Linux 决定通过采用 GNU 工具而不是 BSD 工具来“与众不同”。 GNU 工具对用户更加友好,但它们通常不会在任何 *BSD 系统上找到(就这样)。
真的,如果您将大部分时间都花在 Linux 上,但拥有 Mac 桌面,那么您可能想让 Mac 像 Linux 一样工作。尝试记住两组不同的选项或为 mac 的 BSD 版本的 Bash 编写脚本是没有意义的,除非您正在编写一个想要在 BSD 和 GNU/Linux shell 上运行的实用程序。
【讨论】:
date -j -f "%Y-%m-%d %H:%M:%S" "2020-04-07 00:00:00" "+%s"
当没有%H:%M:%S和00:00:00时会打印动态秒数。
【讨论】:
man strftime,您会看到“%F 等同于 %Y-%m-%d”和“%T 等同于 %H:%M:%S”。因此,我认为您可以根据需要将 input_fmt 缩短为“%F %T”。
我编写了一组脚本,为 BSD 和 GNU 版本的 date 提供统一的接口。
Follow 命令将输出日期2010-10-02 的纪元秒数,它适用于date 的BSD 和GNU 版本。
$ xsh /date/convert "2010-10-02" "+%s"
1286020263
相当于 GNU 版本的 date 的命令:
date -d "2010-10-02" "+%s"
还有带有date的BSD版本的命令:
date -j -f "%F" 2010-10-02 "+%s"
脚本可以在以下位置找到:
它是名为xsh-lib/core 的库的一部分。要使用它们,您需要 repos xsh 和 xsh-lib/core,我在下面列出了它们:
【讨论】:
将 UTC 日期转换为 Unix 时间戳:
date -ju -f "%F %T" "2021-03-08 14:56:21" "+%s"
【讨论】: