Подтвердить что ты не робот

Как преобразовать строки типа "19-FEB-12" в эпоху в UNIX

В UNIX, как преобразовать в эпоху миллисекунд, введите строки:

19-FEB-12
16-FEB-12
05-AUG-09

Мне нужно это, чтобы сравнить эти даты с текущим временем на сервере.

4b9b3361

Ответ 1

Чтобы преобразовать дату в секундах с эпохи:

date --date="19-FEB-12" +%s

Текущая эпоха:

date +%s

Итак, поскольку ваши даты в прошлом:

NOW=`date +%s`
THEN=`date --date="19-FEB-12" +%s`

let DIFF=$NOW-$THEN
echo "The difference is: $DIFF"

Используя команду BSD date, вам понадобится

$ date -j -f "%d-%B-%y" 19-FEB-12 +%s

Отличия от GNU date:

  • -j предотвращает попытку date установить часы
  • Формат ввода должен быть явно установлен с помощью -f
  • Дата ввода является регулярным аргументом, а не опцией (-d)
  • Если время не указано с датой, вместо этого используйте текущее время полуночи.

Ответ 2

Здесь один из способов: GNU awk. Для запуска:

awk -f script.awk file

Содержание script.awk:

BEGIN {

    n = systime()

    FS="-"
}

{
    t = mktime(sprintf("%d %d %d %d %d %d", "20" $3, convert($2), $1, 0, 0, 0))    

    printf "%.1f days ago\n", (n - t) / 60 / 60 / 24
}

function convert(m) {

    return(((index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", m) - 1) / 3) + 1)
}

Результаты:

358.6 days ago
361.6 days ago
1286.6 days ago