Как я могу создать временные метки Unix?

Связанный с этим вопрос "Datetime To Unix timestamp" , но этот вопрос более общий.

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

Что такое самый простой способ генерации временных меток Unix?

Ответ 1

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

date +%s

где

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

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

Ответ 2

в Ruby:

>> Time.now.to_i
=> 1248933648

Ответ 3

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

>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993

Ответ 4

curl icanhazepoch.com

В основном это временные метки unix как служба (UTaaS)

Ответ 5

В Perl:

>> time
=> 1335552733

Ответ 6

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

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

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

Ответ 7

Прежде всего, эпоха Unix или нулевое время - 1970-01-01 00: 00: 00Z (означает полуночи 1 января 1970 года в часовом поясе Zulu или 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"'

Ответ 8

$ date +%s.%N

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

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

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

Ответ 9

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

php -r 'echo time();'

В BASH:

clitime=$(php -r 'echo time();')
echo $clitime

Ответ 10

Это небольшой инструмент, который я собрал, так как мне всегда нужно получать и конвертировать временные метки unix: http://www.unixstamp.com

Он поддерживает практически любой формат, включая метрики времени миллисекунд javascript.

Ответ 11

В Haskell...

Чтобы вернуть его как тип POSIXTime:

import Data.Time.Clock.POSIX
getPOSIXTime

В качестве целого числа:

import Data.Time.Clock.POSIX
round `fmap` getPOSIXTime

Ответ 12

public static Int32 GetTimeStamp()
    {
        try
        {
            Int32 unixTimeStamp;
            DateTime currentTime = DateTime.Now;
            DateTime zuluTime = currentTime.ToUniversalTime();
            DateTime unixEpoch = new DateTime(1970, 1, 1);
            unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds;
            return unixTimeStamp;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
            return 0;
        }
    }

Ответ 13

в Haskell

import Data.Time.Clock.POSIX

main :: IO ()
main = print . floor =<< getPOSIXTime

в Go

import "time"
t := time.Unix()

в C

time(); // in time.h POSIX

// for Windows time.h
#define UNIXTIME(result)   time_t localtime; time(&localtime); struct tm* utctime = gmtime(&localtime); result = mktime(utctime);

в Swift

NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970

Ответ 14

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

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

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

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

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

Ответ 15

Если вам нужна временная метка Unix из оболочки script (семейство Bourne: sh, ksh, bash, zsh,...), это должно работать на любой машине Unix, как в отличие от других предложений (perl, haskell, ruby, python, GNU date), он основан на стандартной команде POSIX и функции.

PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'

Ответ 16

С NodeJS просто откройте терминал и введите:
node -e "console.log(new Date().getTime())" или node -e "console.log(Date.now())"

Ответ 17

В Bash 5 появилась новая переменная:

echo $EPOCHSECONDS

Или, если вы хотите более высокую точность (в микросекундах):

echo $EPOCHREALTIME

Ответ 18

Если я хочу напечатать utc date time с помощью команды date, мне нужно использовать аргумент -u с командой date.

пример

date -u

Выход

Fri Jun 14 09:00:42 UTC 2019