查找两种(非标准)日期格式之间的秒数的简单方法?

查找两种(非标准)日期格式之间的秒数的简单方法?

我有一个程序,它以以下形式输出日期:

Thu Mar 5 09:15:27 2015

这与 Linux 中的输出非常接近date,但此格式不包括时区。假设我可以捕获字符串Thu Mar 5 09:15:27 2015asdate1和字符串Thu Mar 5 09:30:58 2015as date2in 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 strftimeinfo 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 内的内容。

(对于两者,日期均假定为当地时区)。

相关内容