从一本古老的日志中读到,日期是这样的:
Wed 31 Oct 2018 08:42:00 AM UTC
另一个日期是这样的:
12-10-2018 14:37:42
这是我能得到的最好的
date -r ${fname} "+%m-%d-%Y %H:%M:%S"
。
可以比较这些日期吗?第一次使用今天这个词的事实让我非常沮丧。如果是的话,怎么办?
如果日期遵循
ymdHMS
模式,比较起来会容易得多,因为普通的旧字符串比较是有效的:
#!/bin/bash
format='+%Y-%m-%d %H:%M:%S'
date1='Wed 31 Oct 2018 08:42:00 AM UTC'
date1=$(date -d "$date1" "$format")
date2=$(date -r "$fname" "$format")
if [[ $date1 < $date2 ]] ; then
echo "$date1 goes before $date2"
else
echo "$date1 goes after $date2"
fi
如果您获取上述格式的日期,那么您需要先转换第二个数据字符串,使其可以由 Unix
date
命令解析。这是一个例子:
#!/usr/bin/env bash
dt1='Wed 31 Oct 2018 08:42:00 AM UTC'
dt2='12-10-2018 14:37:42'
dt2=$(sed -E 's/^([0-9]{2}-[0-9]{2})-([0-9]{4})/\2-\1/' <<< "$dt2")
echo "$dt2" # 2018-12-10 14:37:42
# compare EPOCH second values of both dates
if (( $(date -d "$dt1" '+%s') < $(date -d "$dt2" '+%s') )); then
echo "date1 is less than date2"
else
echo "date1 is >= than date2"
fi
我编写了以下脚本来尝试学习这一点,我希望它可以帮助某人......
#!/bin/bash
mFormat='+%y-%m-%d'
mTestDate=$(date "$mFormat")
mFixedDate=$(date -d "15 days ago" "$mFormat")
mLoop=$((1))
echo "The Test Result says ... mTestDate mFixedDate"
echo "-------------------------------------------- -------------------- --------------------"
while true; do
# if (( $(date -d $( echo $mFixedDate | tr -d "-" ) '+%s' ) > $(date -d $( echo $mTestDate | tr -d "-" ) '+%s' ) )); then
if [[ $mFixedDate > $mTestDate ]] ; then
echo "The result is mFixedDate ("$mFixedDate") is larger "$mTestDate" ("$(date +%s -d $( echo $mTestDate | tr -d "-" ) )") "$mFixedDate" (">
else
echo "The result is mTestDate ("$mTestDate") is larger "$mTestDate" ("$(date +%s -d $( echo $mTestDate | tr -d "-" ) )") "$mFixedDate" ("$>
fi
mTestDate=$(date -d $mLoop" day ago" "$mFormat")
mLoop=$((mLoop+1))
if [ $mLoop -gt 20 ]; then
echo "Test Complete!" && break
fi
done
对我来说,问题似乎是从年份开始的日期格式,如果它以 +"%d-%m-%y" 格式开头,那么结果是错误的 - 我已经在上面的脚本中对此进行了测试并尝试过更改 mFormat 值以显示结果... 我希望这有帮助......
例如,您可以通过创建日期对象的新实例来比较两个日期。
var date1 = new Date('Wed 31 Oct 2018 08:42:00 AM UTC');
var date2 = new Date('12-10-2018 14:37:42');
这会将其转换为默认日期格式。