【问题标题】:How to convert DATE to UNIX TIMESTAMP in shell script on MacOS如何在 MacOS 上的 shell 脚本中将 DATE 转换为 UNIX TIMESTAMP
【发布时间】: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 macos date shell


    【解决方案1】:
    date +%s
    

    这对我在 OS X Lion 上运行良好。

    【讨论】:

    • 同样适用于 Linux (Ubuntu 10.04)
    • OP 询问有关将特定给定日期转换为时间戳的问题。 date +%s 将只使用当前日期。
    【解决方案2】:

    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"
    

    或者使用任何你想要的格式。

    【讨论】:

    • 在 OSX 终端上使用 bash shell 我无法使用上述命令 例如:currDate=date +%Y%m%d date -j -f "%a %b %d %T %Z %Y" "$ {currDate}" "+%s"
    • @Jagdeep 仅当指定的时区是系统时区时,这才适用于 OSX。我在PDT 所以在上面的命令中,改变EDTPDT 对我有用。
    【解决方案3】:

    date -j -f "%Y-%m-%d" "2010-10-02" "+%s"

    【讨论】:

      【解决方案4】:

      我在 Mac OSX 上使用了以下内容。

      currDate=`date +%Y%m%d`
      epochDate=$(date -j -f "%Y%m%d" "${currDate}" "+%s")
      

      【讨论】:

        【解决方案5】:

        您也可以像这样安装 GNU date:

        1. 安装自制软件:https://brew.sh/
        2. brew install coreutils
        3. 添加到您的 bash_profile:alias date="/usr/local/bin/gdate"
        4. 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 上运行的实用程序。

        【讨论】:

          【解决方案6】:

          date -j -f "%Y-%m-%d %H:%M:%S" "2020-04-07 00:00:00" "+%s"

          当没有%H:%M:%S00:00:00时会打印动态秒数。

          【讨论】:

          • 很好,谢谢。如果您man strftime,您会看到“%F 等同于 %Y-%m-%d”和“%T 等同于 %H:%M:%S”。因此,我认为您可以根据需要将 input_fmt 缩短为“%F %T”。
          【解决方案7】:

          我编写了一组脚本,为 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 xshxsh-lib/core,我在下面列出了它们:

          【讨论】:

            【解决方案8】:

            将 UTC 日期转换为 Unix 时间戳:

            date -ju -f "%F %T" "2021-03-08 14:56:21" "+%s"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-06-27
              • 1970-01-01
              • 2011-11-21
              • 1970-01-01
              • 2011-02-20
              • 1970-01-01
              相关资源
              最近更新 更多