Как я могу генерировать метки времени Unix? - PullRequest
201 голосов
/ 30 июля 2009

Смежный вопрос "Отметка времени Datetime To Unix" , но этот вопрос носит более общий характер.

Мне нужны временные метки Unix для решения моего последнего вопроса. Мои интересы - Python, Ruby и Haskell, но приветствуются и другие подходы.

Какой самый простой способ генерировать метки времени Unix?

Ответы [ 17 ]

386 голосов
/ 07 сентября 2012

В Linux или MacOS вы можете использовать:

date +%s

где

  • +%s, секунды с 1970-01-01 00:00:00 UTC. (GNU Coreutils 8.24 Дата руководства)

Пример вывода сейчас 1454000043.

110 голосов
/ 30 июля 2009

в рубине:

>> Time.now.to_i
=> 1248933648
17 голосов
/ 02 мая 2012

В python добавьте следующие строки, чтобы получить метку времени:

>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
14 голосов
/ 12 мая 2015

curl icanhazepoch.com

В основном это метки времени Unix как услуга (UTaaS)

12 голосов
/ 27 апреля 2012

В Perl:

>> time
=> 1335552733
8 голосов
/ 04 мая 2010

Команда unix 'date' на удивление универсальна.

date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

Принимает вывод date, который будет в формате, определенном -f, и затем распечатывает его (-j говорит, что не пытается установить дату) в форме +% s, секунд с начала эпохи .

7 голосов
/ 30 июля 2009

Прежде всего, «эпоха» Unix или ноль времени - это 1970-01-01 00: 00: 00Z (что означает полночь 1 января 1970 года в часовом поясе Зулу, GMT или UTC). Отметка времени Unix - это количество секунд с этого времени, без учета високосных секунд.

Генерация текущего времени в Perl довольно проста:

perl -e 'print time, "\n"'

Генерировать время, соответствующее заданному значению даты / времени, довольно сложно. Логически вы используете функцию strptime() из POSIX. Однако модуль Perl POSIX :: strptime (который отделен от модуля POSIX) имеет подпись:

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = 
                                     POSIX::strptime("string", "Format");

Функция mktime в модуле POSIX имеет подпись:

mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)

Итак, если вы знаете формат ваших данных, вы можете написать вариант:

perl -MPOSIX -MPOSIX::strptime -e \
    'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"'
6 голосов
/ 28 января 2016
$ date +%s.%N

где (Руководство по дате GNU Coreutils 8.24)

  • +%s, секунды с 1970-01-01 00:00:00 UTC
  • +%N, наносекунды (000000000..999999999) с эпохи

Пример вывода сейчас 1454000043.704350695. Я заметил, что руководство BSD date не содержит точного объяснения флага +%s.

3 голосов
/ 05 июля 2015

Для полноты, PHP:

php -r 'echo time();'

В BASH:

clitime=$(php -r 'echo time();')
echo $clitime
2 голосов
/ 11 ноября 2017

Давайте попробуем JavaScript :

var t = Math.floor((new Date().getTime()) / 1000);

... или даже лучше, статический подход:

var t = Math.floor(Date.now() / 1000);

В обоих случаях я делю на 1000, чтобы перейти от секунд к миллисам, и использую Math.floor, чтобы представлять только прошедшие целые секунды (по сравнению с округлением, которое может округлять до целой секунды, которая не прошла пока).

...