如何比较两个不同格式的日期?

问题描述 投票:0回答:4

从一本古老的日志中读到,日期是这样的:

Wed 31 Oct 2018 08:42:00 AM UTC

另一个日期是这样的:

12-10-2018 14:37:42

这是我能得到的最好的

date -r ${fname} "+%m-%d-%Y %H:%M:%S"

可以比较这些日期吗?第一次使用今天这个词的事实让我非常沮丧。如果是的话,怎么办?

bash date timestamp comparison utc
4个回答
3
投票

如果日期遵循

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

1
投票

如果您获取上述格式的日期,那么您需要先转换第二个数据字符串,使其可以由 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

0
投票

我编写了以下脚本来尝试学习这一点,我希望它可以帮助某人......

#!/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 值以显示结果... 我希望这有帮助......


-1
投票

例如,您可以通过创建日期对象的新实例来比较两个日期。

var date1 = new Date('Wed 31 Oct 2018 08:42:00 AM UTC');
var date2 = new Date('12-10-2018 14:37:42');

这会将其转换为默认日期格式。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.