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

How to compare two dates of different format?

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

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

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

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

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

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