Bash-将日期转换为时间戳

Bash-将日期转换为时间戳,bash,date,timestamp,Bash,Date,Timestamp,我想把日期转换成时间戳 我的输入看起来像: 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) 但是,在某些情况下,这

我想把日期转换成时间戳

我的输入看起来像:

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 )) 
编辑:添加一个通用解决方案(在做了一些测试和搜索(google))之后,您是否可以尝试以下内容,其中将提供两个日期之间的精确日、时、分和秒差

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时区)



你能试一下吗

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要求获得与今天日期差异的日期

获取天数差异的解释:

  • 首先,我将OP的给定日期传递给
    date--date…
    命令,以将其获取并保存到
    prev
    bash变量中
  • 现在正在创建具有今天纪元时间的
    today
    bash变量
  • 然后取这两个变量的历元时间值之差,通过将
    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
    

    我喜欢这个想法,但它似乎不起作用,如果你尝试其他日期,你会看到nuimber 25将再次出现。认为日期的格式是错误的。我找到了一个临时解决方案,但它不能处理几个小时(只有几天),它会用我找到的内容更新帖子。@Fredrik,嘿,我刚刚检查了另一天,天数就快到了。我唯一需要编辑/添加的是小时计算,我会在某个时候添加,然后让你知道。好的,尝试了一些东西,效果非常好!有什么想法我可以包括小时吗?@Fredrik,是的,我正在研究它,伙计,几分钟后会让你知道:)在做了进一步的测试,我想你做的代码实际上也可以处理小时/分钟/秒。不是100%确定,但有一个时间是:周五10月25日22:24:20 amd将其与现在进行比较,即(1572077267-157204260)/3600=>9.69,晚了两个小时,但我想这是由于与我使用的站点的时间差。但由于它不是0,这意味着它可以在一天内处理数小时:)
    prev=$(date --date='Mon Aug 30 17:37:39 2019' +"%s")
    today=$(date +%s)
    echo $(( ($today - $prev )/(60*60*24) ))
    56