Получить текущее время в секундах с момента эпохи на Linux, Bash



мне нужно что-то простое, как date, но в секундах с 1970 года вместо текущей даты, часов, минут и секунд.



date не похоже, чтобы предложить этот вариант. Есть ли простой способ?

761   6  

6 ответов:

Это должно работать:

date +%s

добавить.

Получить секунды с эпохи (1 января 1970 года) для любой заданной даты(например, 21 октября 1973 года).

date -d "Oct 21 1973" +%s


Преобразуйте количество секунд назад к дате

date --date @120024000


Команда date - Это довольно универсальный. Еще одна классная вещь, которую вы можете сделать с датой(бесстыдно скопирована с date --help). Показать местное время на 9 утра в следующую пятницу на западном побережье США

date --date='TZ="America/Los_Angeles" 09:00 next Fri'

еще лучше, потратьте некоторое время, чтобы прочитать страницу man http://man7.org/linux/man-pages/man1/date.1.html

до сих пор все ответы используют внешнюю программу date.

С Тех Пор Как Bash 4.2, printf новый модификатор %(dateformat)T это, когда используется с аргументом -1 выводит текущую дату в формате выданный dateformat, работающий strftime(3) (man 3 strftime для информации о форматах).

Итак, для чистого решения Bash:

printf '%(%s)T\n' -1

или если вам нужно сохранить результат в переменной var:

printf -v var '%(%s)T' -1

нет внешних программ и нет подрешетки!

начиная с Bash 4.3, можно даже не указывать -1:

printf -v var '%(%s)T'

(но было бы разумнее всегда приводить аргумент -1 тем не менее).

если вы используете -2 в качестве аргумента вместо -1, Bash будет использовать время запуска оболочки вместо текущей даты (но зачем вам это нужно?).

Это расширение к тому, что @pellucide сделал, но для Macs:

чтобы определить количество секунд с момента эпохи (1 января 1970 года) для любой заданной даты (например, 21 октября 1973 года)

$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800

обратите внимание, что для полноты картины, я добавил часть времени в формат. Причина в том, что date будет принимать любую дату часть вы дали его и добавить настоящее время значение. Например, если вы выполните приведенную выше команду в 4: 19 вечера, без часть "00: 00: 00", она добавит время автоматически. Такие, что "окт 21 1973" будет разбираться как "окт 21 1973 16:19:00". Это может быть не то, что вы хотите.

чтобы преобразовать метку времени обратно в дату:

$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973

man-страница Apple для реализации даты: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html

С большинством реализаций Awk:

awk 'BEGIN {srand(); print srand()}'

используйте этот скрипт bash (my ~/bin/epoch):

#!/bin/bash

# get seconds since epoch
test "x" == x && date +%s && exit 0

# or convert epoch seconds to date format (see "man date" for options)
EPOCH=""
shift
date -d @"$EPOCH" "$@"

Comments

    Ничего не найдено.