我有一个程序,它以以下形式输出日期:
Thu Mar 5 09:15:27 2015
这与 Linux 中的输出非常接近date
,但此格式不包括时区。假设我可以捕获字符串Thu Mar 5 09:15:27 2015
asdate1
和字符串Thu Mar 5 09:30:58 2015
as date2
in bash
,我如何获得这两个日期之间的秒数(无需编写我自己的 bash/python/等脚本来进行计算)?
答案1
不知道你所说的“没有计算”是什么意思。下面进行计算...
date1="Thu Mar 5 09:15:27 2015"
date2="Thu Mar 5 09:30:58 2015"
printf "%s\n" $(( $(date -d "$date2" "+%s") - $(date -d "$date1" "+%s") ))
答案2
如果没有时区信息,您就无法始终给出正确的答案。
#!/bin/bash
export TZ
for TZ in America/New_York Europe/Prague ; do
d1=$(date -d 'Mar 8 01:59:59 2015' +%s)
d2=$(date -d 'Mar 8 03:00:01 2015' +%s)
echo "$TZ: $((d2-d1))"
done
答案3
请注意,其他一些 shell 具有内置功能:
桀骜
zmodload zsh/datetime
date1='Thu Mar 5 09:15:27 2015'
date2='Thu Mar 5 09:30:58 2015'
for v (date{1,2}) strftime -rs $v '%a %b %d %T %Y' ${(P)v}
echo $((date2 - date1))
看info zsh strftime
和info zsh flags
有关详细信息,请参阅P
参数扩展标志。
克什93
date1='Thu Mar 5 09:15:27 2015'
date2='Thu Mar 5 09:30:58 2015'
echo "$(($(printf '%(%s)T - %(%s)T' "$date2" "$date1")))"
有关详细信息,请参阅man <(printf --nroff 2>&1)
ksh 内的内容。
(对于两者,日期均假定为当地时区)。