我的时间格式为[%Y-%m-%d %H:%M:%S]
,时间戳为[2009/05/11 07:30:00]
。我需要的是如何比较这两个值。可能的是时间戳与时间格式不相似,例如[%Y-%m%d %H:%M]
。这是错的。
一些想法?
答案 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
中指定输入格式)。