【问题标题】:Bash - Convert date to timestampBash - 将日期转换为时间戳
【发布时间】:2019-10-26 06:40:55
【问题描述】:

我想将日期转换为时间戳。

我的输入类似于:

Mon Sep 30 17:37:39 2019 

我想获取那个时间戳并检查自今天以来已经过去了多少天。

我尝试了什么:

data = "$(date --date "$(echo "$info" | grep "Date added: *" | sed 's/Date added\:\s//i' | awk '{$1=$1};1')" '+%H')"
final = $(expr $(date '+%H') - $data)  

但是,在某些情况下,这会打印出诸如 -9、-3、-12 等值,并且对于今天的日期,它当前会打印出“08”。任何想法如何解决这个问题?

值得一提的是,如果这会使事情复杂化,我并不真正关心确切的时间,我更感兴趣的是过去了多少天。

编辑

当前解决方案(不处理小时数,这很糟糕)。我提取日、月和年并将其组织成 YYYY-MM-DD,然后将其转换为时间戳。该解决方案最终无法处理我想要的时间。

$(( ($(expr $(date '+%s')) - $(date -d "$(printf '%s\n' "$date_added" | awk '{
        printf "%04d-%02d-%02d\n", $5, \
        (index("JanFebMarAprMayJunJulAugSepOctNovDec",$2)+2)/3,$3}')" +"%s")) / 3600 )) 

【问题讨论】:

    标签: bash date timestamp


    【解决方案1】:

    编辑: 添加一个通用解决方案(在进行一些测试和搜索(谷歌)之后),您能否尝试以下将提供确切日期、小时、分钟和两个日期之间的秒差。

    prev=$(date --date='Mon Aug 30 14:46:39 2019' +"%s")
    today=$(date +%s)
    number_of_seconds=$(( ($today - $prev ) ))
    printf '%dd:%dh:%dm:%ds\n' $(($number_of_seconds/86400)) $(($number_of_seconds%86400/3600)) $(($number_of_seconds%3600/60)) $(($number_of_seconds%60))
    

    输出如下(我在我的aws 服务器上,其中包含UTC 时区)。

    56d:17h:29m:14s
    ##### Where my system's date is: #####
    date
    Sat Oct 26 08:16:14 UTC 2019
    


    请您尝试关注一次。

    prev=$(date --date='Mon Sep 30 17:37:39 2019' +"%s")
    today=$(date +%s)
    echo $(( ($today - $prev )/(60*60*24) ))
    

    输出我得到它25,因为我在 IST 时区,现在大约是 IST 下午 12:20。变量名称也是不言自明的,其中 prev 变量是 OP 要求获取与今天日期的差异的日期。

    获取天差的说明:

    1. 首先,我将 OP 的给定日期传递给 date --date... 命令以将其放入 epoch time 并将其保存到 prev bash 变量中。
    2. 现在创建 today bash 变量,该变量具有今天的纪元时间。
    3. 然后将这 2 个变量的纪元时间值进行差分,然后通过将 60*60*24 与其差分纪元值相除,将它们转换为精确的天数。


    注意:在不同日期进行测试,例如 2019 年 8 月 30 日:

    prev=$(date --date='Mon Aug 30 17:37:39 2019' +"%s")
    today=$(date +%s)
    echo $(( ($today - $prev )/(60*60*24) ))
    56
    

    【讨论】:

    • 我喜欢这个想法,但它似乎不起作用,如果你尝试其他日期,你会发现 25 号将再次出现。认为日期的格式是错误的。我找到了一个临时解决方案,但它不能处理数小时(仅数天),会用我发现的内容更新帖子。
    • @Fredrik,嘿,我刚刚又检查了一天,天数即将到来。我唯一需要编辑/添加的是小时计算,我会在某个时候添加并让你知道。
    • 好吧,尝试了一些东西,效果很好!有什么想法可以包括时间吗?
    • @Fredrik,是的,我正在调查,伙计,几分钟后会告诉你:)
    • 做了一些进一步的测试,我认为您编写的代码实际上也可以处理小时/分钟/秒。不是 100% 肯定,但有一次是:Fri Oct 25 22:24:20 amd 与现在比较,即 (1572077267 - 1572042260) /3600 => 9.69,晚了两个小时,但我想这是由于与我使用的网站。但由于它不是 0 意味着它确实在一天内处理几个小时:)
    猜你喜欢
    • 2014-10-26
    • 2016-11-26
    • 1970-01-01
    • 2011-01-23
    • 2020-10-19
    • 1970-01-01
    • 2017-04-25
    • 2022-01-08
    相关资源
    最近更新 更多