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



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

如果日期不一定是相同的格式,一种简单的方法是将它们转换为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可以理解许多常见的日期格式,而无需首先输入。

验证日期字符串是否为特定格式,您可以将日期强制转换为所需格式,并验证该字符串是否与您开始时使用的相同:

$ 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中指定输入格式)。

如果日期的格式相同,并且格式是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

相关内容

  • 没有找到相关文章

最新更新