Как сравнить две даты разного формата? - PullRequest
0 голосов
/ 10 декабря 2018

При чтении из древнего журнала, дата выглядит так:

Wed 31 Oct 2018 08:42:00 AM UTC

Другая дата выглядит так:

12-10-2018 14:37:42

, что было лучшим, что я мог получить с date -r ${fname} "+%m-%d-%Y %H:%M:%S".

Можно ли сравнить эти даты?Тот факт, что вначале используется слово «день», очень меня разочаровывает.Если да, то как?

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Вы можете сравнить две даты, например, создав новый экземпляр вашего объекта даты.

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

это преобразует его в формат даты по умолчанию.

0 голосов
/ 10 декабря 2018

Если вы получаете даты в указанном формате, вам нужно преобразовать вторую строку данных, чтобы сначала ее можно было проанализировать с помощью команды 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 голосов
/ 10 декабря 2018

Даты намного легче сравнивать, если они следуют шаблону 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
...