【问题标题】:convert date to epoch using a format string使用格式字符串将日期转换为纪元
【发布时间】:2016-08-29 00:50:15
【问题描述】:

我需要我的 bash 脚本使用 FORMAT 字符串将字符串转换为秒(从纪元开始),日期和格式字符串都由用户给出。好像在date的BSD版本中可以这样,

date -j -f "$format" "$date" +%s //format can be anything, e.g. "%Y %m %d %H:%M"

但我使用的是 Ubuntu。有没有办法使用 bash/awk/perl 等来完成这个?

【问题讨论】:

    标签: perl awk


    【解决方案1】:
    date -d "$date" +%s
    

    例如,

    $ date='2016 05 03 16:00' date -d "$date" +%s
    1462248000
    

    无法指定传递给-d 的日期格式,但没有理由这样做。 date 使用启发式算法,可以很好地处理您的日期格式。

    如果启发式不处理格式,您将无法使用 GNU 的 date

    【讨论】:

    • 谢谢,但您的 $date 是 ISO 格式。我需要能够以 strftime() 方式控制确切的格式。
    • 这些都不是真的。这两个日期都不是 ISO8601 格式,并且提供并使用了 strftime 的精确格式 (%s)。
    • 好的,但它仍然不能帮助我解决我的问题。当然输出是%s,但是我需要控制INPUT字符串的格式。
    • 不,你没有。正如我所展示的,即使您不这样做,它也可以工作。我也解释了原因。
    • 我知道,池上。但正如我所说,格式完全取决于用户。如果输入字符串的一部分类似于 10:09,则日期(或任何其他程序)无法自动识别 %H:%M 和 %M:%H 之间的区别。
    【解决方案2】:

    我建议你使用 Perl,它的核心是 Time::Piece 模块

    $ perl -MTime::Piece -E 'say Time::Piece->strptime(@ARGV)->epoch' 'Dec 25 2015 06:05:04' '%b %d %Y %H:%M:%S'
    1451023504
    

    【讨论】:

      【解决方案3】:

      对于支持%sdate

      date +%s
      

      对于 Perl:

      perl -e 'print time(),"\n"'
      

      【讨论】:

      • 这给了现在的纪元时间,而不是$date
      • 对不起,如果我没有清楚地解释自己。我需要使用用户给定的格式字符串来解析用户给定的日期。
      • 随心所欲地调用它,但它会给出 1462306685,而它应该给出 1462248000。我认为这个答案完全错误。
      • OP 要求“使用作为参数传递的 FORMAT 字符串将字符串转换为秒数”。您的示例不允许用户提供日期字符串或格式字符串,并且不进行任何转换。
      • “使用作为参数传递的 FORMAT 字符串将字符串转换为秒” 直接来自问题的原始草案。您的回答无法解决该问题或任何编辑
      猜你喜欢
      • 2019-08-21
      • 2012-04-03
      • 2018-02-18
      • 2018-08-07
      • 2012-11-22
      • 2013-12-23
      • 2014-11-18
      • 2015-01-23
      • 2020-09-14
      相关资源
      最近更新 更多