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

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

Модератор: /dev/random

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

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

Сообщение 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
Спасибо сказали:

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

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

Сообщение /dev/random » 18.06.2014 19:12

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
Сообщения: 267
ОС: OpenBSD

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

Сообщение nerve » 18.06.2014 21:41

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

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

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

Сообщение nerve » 18.06.2014 21:46

/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


У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:

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

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

Сообщение /dev/random » 18.06.2014 21:50

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

И запятую убрать.
Спасибо сказали:

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

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

Сообщение nerve » 18.06.2014 22:12

/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
Администратор
Сообщения: 4866
ОС: Gentoo

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

Сообщение /dev/random » 18.06.2014 22:23

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, соответственно, команда сконвертирует часовой пояс перед выдачей результата. Онлайн-конвертор этого не делает.
Спасибо сказали: