我有以下日期格式,即数据库查询结果:
yyyy-mm-dd-hh.mm.ss.mmmmmm
示例
myDate=2014-03-28-23.05.04.000000
我试过
$(( ( $(date +%s) - $(date -d "${myDate}" +%s) ) /(24 * 60 * 60 ) ))
但它给我的日期无效错误。
我想知道自myDate以来已经过了多少天。我需要将结果不向上或向下舍入为例,根据小时数,分钟数和秒数,结果可能是2.5天或1.6等。
答案 0 :(得分:3)
只需稍微调整分隔符:
$ date -d "$(sed 's/-/ /3; s/\./:/1; s/\./:/1' <<< $myDate)" +%s
1396062304
将第3个连字符更改为空格,然后将第一个点更改为冒号,然后将(现在)第一个点更改为冒号。
然后
$ echo $(( ( $(date +%s) - $(date -d "$( sed 's/-/ /3; s/\./:/1; s/\./:/1' <<< $myDate)" +%s) ) /(24 * 60 * 60 ) ))
2
答案 1 :(得分:2)
您必须使用date -f指定输入格式。例如
date -d -f %Y-%m-%d-%h.%m.%S.?????? "$PmyDate}" +%s
(我不确定mmmmmm指定的内容)此格式使用strptime函数;对此的引用是http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html。