如何比较时间格式和时间戳?

时间:2014-04-26 09:17:56

标签: bash datetime comparison

我的时间格式为[%Y-%m-%d %H:%M:%S],时间戳为[2009/05/11 07:30:00]。我需要的是如何比较这两个值。可能的是时间戳与时间格式不相似,例如[%Y-%m%d %H:%M]。这是错的。 一些想法?

3 个答案:

答案 0 :(得分:2)

如果日期不一定是相同的格式,一种简单的方法是将它们转换为Unix时间戳:

$ date --date="2009/05/11 07:30:00" +%s
1242023400
$ date --date="2009/05/11 07:30" +%s
1242023400

这将为您提供一个整数值,您可以使用以下方法轻松比较:

if [ "$(date --date="$my_date" +%s)" -gt "$(date --date="$my_other_date" +%s)" ]

date了解许多常见的日期格式,而无需先输入输入。

答案 1 :(得分:0)

如果日期格式相同,并且该格式为4位数年份,后跟月份,日期,小时,分钟和秒,但有些会在结尾处被截断,您可以填写后缀并比较这些日期为字符串:

$ rpad_date() {
    case ${#1} in
        4)
            format='%s/01/01 00:00:00'
            ;;
        7)
            format='%s/01 00:00:00'
            ;;
        10)
            format='%s 00:00:00'
            ;;
        13)
            format='%s:00:00'
            ;;
        16)
            format='%s:00'
            ;;
        19)
            format='%s'
            ;;
        *)
            echo "Unknown format: $1" >&2
            return 1
     esac
     printf "$format" "$1"
}
$ rpad_date "2004"
2004/01/01 00:00:00

答案 2 :(得分:0)

verify 日期字符串采用特定格式,您可以将日期强制转换为所需格式,并验证该字符串与您开始时的字符串相同:< / p>

$ format='%Y/%m/%d %H:%M:%S'
$ invalid_date='2009/05/11 07:30'
$ [ "$(date --date="$invalid_date" +"$format")" = "$invalid_date" ]
$ echo "$?"
1
$ valid_date='2009/05/11 07:30:00'
$ [ "$(date --date="$valid_date" +"$format")" = "$valid_date" ]
$ echo "$?"
0

这仅适用于date兼容的日期字符串(您无法直接在date中指定输入格式)。