Конвертировать время в указанном формате в epoch

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Конвертировать время в указанном формате в epoch

Сообщение nerve »

$ date +%s
1403103042
$ date +"%d.%m.%Y, %H:%M"
18.06.2014, 17:51

формат записи даты как в последнем примере. как конвертировать имеющуюся дату в таком формате?
например как получить время в секундах для даты 30.1.2008, 5:30
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Конвертировать время в указанном формате в epoch

Сообщение /dev/random »

nerve писал(а):
18.06.2014 18:56
$ date +%s
1403103042
$ date +"%d.%m.%Y, %H:%M"
18.06.2014, 17:51

формат записи даты как в последнем примере. как конвертировать имеющуюся дату в таком формате?
например как получить время в секундах для даты 30.1.2008, 5:30

В случае GNU date:

Shell

date +%s -d "$(echo '30.1.2008, 5:30' | sed 's/\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\),/\3-\2-\1/')"


В вашем профиле указано, что у вас OpenBSD. У меня сейчас нет BSD, чтобы проверить, но теоретически должна сработать такая команда:

Shell

date -f "%d.%m.%Y, %H:%M" -j '30.1.2008, 5:30' +%s

Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Конвертировать время в указанном формате в epoch

Сообщение nerve »

не, на шлюзе я такими делами не занимаюсь)
обработка даты на линуксе.
мне почему то казалось, что такую задачу должна выполнять date сама, без посторонних средств.
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Конвертировать время в указанном формате в epoch

Сообщение nerve »

/dev/random писал(а):
18.06.2014 19:12
В случае GNU date:

Shell

date +%s -d "$(echo '30.1.2008, 5:30' | sed 's/\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\),/\3-\2-\1/')"


то есть перевернуть год с днем через дефис и этот формат date поймет.
почему-то у меня не совпадает с онлайновым конвертером

Shell

# date +%s -d "$(echo '30.1.2008, 5:30' | sed 's/\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\),/\3-\2-\1/')" 1201667400


date.PNG
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Конвертировать время в указанном формате в epoch

Сообщение /dev/random »

nerve писал(а):
18.06.2014 21:46
то есть перевернуть год с днем через дефис и этот формат date поймет

И запятую убрать.
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Конвертировать время в указанном формате в epoch

Сообщение nerve »

/dev/random писал(а):
18.06.2014 21:50
nerve писал(а):
18.06.2014 21:46
то есть перевернуть год с днем через дефис и этот формат date поймет

И запятую убрать.


Shell

~# date +%s -d "$(echo '30.1.2008, 5:30' | sed 's/\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\), \([0-9]\+\)/\3-\2-\1 \4/')" 1201667400


Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Конвертировать время в указанном формате в epoch

Сообщение /dev/random »

nerve писал(а):
18.06.2014 22:12

Shell

~# date +%s -d "$(echo '30.1.2008, 5:30' | sed 's/\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\), \([0-9]\+\)/\3-\2-\1 \4/')" 1201667400


1. Не вижу, зачем усложнять. Вариант без четвёртой части тоже запятую убирает.

2. Ту часть сообщения, что про онлайн-конвертер, я не видел. Возможно, вы отредактировали сообщение уже после того, как я на него ответил? В любом случае, тот конвертер предполагает, что вы укажете время в UTC, а приведённая команда - местное время. Время в секундах Unix-эпохи всегда указывается в UTC, соответственно, команда сконвертирует часовой пояс перед выдачей результата. Онлайн-конвертор этого не делает.
Спасибо сказали:
Ответить