Ответ 1
В Linux или MacOS вы можете использовать:
date +%s
где
-
+%s
, секунды с 1970-01-01 00:00:00 UTC. (GNU Coreutils 8.24 Дата руководство)
Пример вывода сейчас 1454000043.
Связанный с этим вопрос "Datetime To Unix timestamp" , но этот вопрос более общий.
Мне нужны временные метки Unix для решения моего последнего вопроса. Мои интересы - Python, Ruby и Haskell, но приветствуются другие подходы.
Что такое самый простой способ генерации временных меток Unix?
В Linux или MacOS вы можете использовать:
date +%s
где
+%s
, секунды с 1970-01-01 00:00:00 UTC. (GNU Coreutils 8.24 Дата руководство)Пример вывода сейчас 1454000043.
в Ruby:
>> Time.now.to_i
=> 1248933648
В python добавьте следующие строки, чтобы получить отметку времени:
>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
curl icanhazepoch.com
В основном это временные метки unix как служба (UTaaS)
В Perl:
>> time
=> 1335552733
Команда unix 'date' на удивление универсальна.
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
Получает вывод date
, который будет в формате, определенном -f, а затем распечатывает его (-j говорит, что не пытайтесь установить дату) в форме +% s, секунды с эпохи.
Прежде всего, эпоха 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"'
$ date +%s.%N
где (Руководство пользователя GNU Coreutils 8.24)
+%s
, секунды с 1970-01-01 00:00:00 UTC+%N
, наносекунды (000000000..999999999) с эпохиПример вывода теперь 1454000043.704350695
.
Я заметил, что руководство BSD date
не содержит точное описание флага +%s
.
Для полноты PHP:
php -r 'echo time();'
В BASH:
clitime=$(php -r 'echo time();')
echo $clitime
Это небольшой инструмент, который я собрал, так как мне всегда нужно получать и конвертировать временные метки unix: http://www.unixstamp.com
Он поддерживает практически любой формат, включая метрики времени миллисекунд javascript.
В Haskell...
Чтобы вернуть его как тип POSIXTime:
import Data.Time.Clock.POSIX
getPOSIXTime
В качестве целого числа:
import Data.Time.Clock.POSIX
round `fmap` getPOSIXTime
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;
}
}
в 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
Давайте попробуем JavaScript:
var t = Math.floor((new Date().getTime()) / 1000);
... или даже лучше, статический подход:
var t = Math.floor(Date.now() / 1000);
В обоих случаях я делю на 1000
чтобы перейти от секунд к миллисам, и использую Math.floor
для представления только целых секунд, которые прошли (против округления, которое может округлять до целой секунды, которая еще не прошла).
Если вам нужна временная метка Unix из оболочки script (семейство Bourne: sh, ksh, bash, zsh,...), это должно работать на любой машине Unix, как в отличие от других предложений (perl, haskell, ruby, python, GNU date), он основан на стандартной команде POSIX и функции.
PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'
С NodeJS просто откройте терминал и введите: node -e "console.log(new Date().getTime())"
или node -e "console.log(Date.now())"
В Bash 5 появилась новая переменная:
echo $EPOCHSECONDS
Или, если вы хотите более высокую точность (в микросекундах):
echo $EPOCHREALTIME
Если я хочу напечатать utc date time с помощью команды date, мне нужно использовать аргумент -u с командой date.
пример
date -u
Выход
Fri Jun 14 09:00:42 UTC 2019