В Bash и большинстве современных оболочек, полученных из Bourne, $()предпочтение перед обратными метками для удобства чтения и других причин . echo $(( $(date ...) / 86400 ))
Приостановлено до дальнейшего уведомления.
Еще нет 2000 ... может кто-нибудь отредактировать и исправить заголовок :-)
Кольцо Ø
Ответы:
20
ring0 побил меня на несколько секунд, но полная команда:
@netvope После дополнительной високосной секунды время unix снова сбрасывается на единицу. Таким образом, каждый день добавляет ровно 86400 секунд Unix. Однако время Unix 915148800 может обозначать UTC 1998-12-31T23: 59: 60 и 1999-01-01T00: 00: 00 en.wikipedia.org/wiki/Unix_time#Leap_seconds
Debilski
9
Команда dateможет дать вам количество секунд с тех пор 1970-01-01 00:00:00 UTC.
date +"%s"
Вы можете разделить результат 3600*24на количество дней (UTC).
Почему это понижено? Это самый лучший, самый короткий и простой ответ
Том Корелис,
1
Мне нужно было решить и это, но я хотел получить одно и то же значение для дня, независимо от времени суток. При подходах, подобных показанным здесь, значение будет меняться в полночь по UTC вместо полуночи по местному времени. Это, вероятно, кажется меньшей проблемой в ЕС или на восточном побережье США, которые достаточно близки к UTC, так что значение дня не изменится в середине типичного рабочего дня, но, например, в Калифорнии, изменение дня произойдет в 16:00 по тихоокеанскому времени, что может быть неудобно. Я предполагаю, что австралийцы были бы особенно раздражены, чтобы иметь изменение дневного значения поздним утром.
Если мы хотим исправить это, нам нужно добавить смещение от UTC до деления на секунды / день. К счастью, команда даты в Linux включает последовательность формата % z , которая сообщает о смещении от UTC. Пока стандартный формат (это результат для денверского времени, MDT):
$ date +%z
-0600
, , , не может быть непосредственно использован в вычислениях, правильные модификаторы будут давать то, что мы хотим:
$ date +%-:::z
-6
Поместите это вместе с обычными конверсиями в секундах / часах / днях, и я полагаю, что следующие должны выводить дни с 01.01.1970, причем сам 01.01.1970 будет нулевым днем, а значение будет увеличиваться в полночь по местному времени:
Это простое вычисление не будет работать для часовых поясов, которые не смещены от UTC на целые часы (например, Индия, TZ = Азия / Калькутта), поскольку «+5: 30», полученное с помощью, date +%-:::zприведет к ошибке «недопустимый символ в выражении» при использовании в приведенном выше заявлении.
$()
предпочтение перед обратными метками для удобства чтения и других причин .echo $(( $(date ...) / 86400 ))
Ответы:
ring0 побил меня на несколько секунд, но полная команда:
Это идет по времени UTC. Результат:
Быстрая проверка с WolframAlpha показывает , что это правильное значение.
источник
Команда
date
может дать вам количество секунд с тех пор1970-01-01 00:00:00 UTC
.Вы можете разделить результат
3600*24
на количество дней (UTC).Например, в Баш
для отображения количества дней.
источник
Я думаю, что это самый простой метод:
источник
Мне нужно было решить и это, но я хотел получить одно и то же значение для дня, независимо от времени суток. При подходах, подобных показанным здесь, значение будет меняться в полночь по UTC вместо полуночи по местному времени. Это, вероятно, кажется меньшей проблемой в ЕС или на восточном побережье США, которые достаточно близки к UTC, так что значение дня не изменится в середине типичного рабочего дня, но, например, в Калифорнии, изменение дня произойдет в 16:00 по тихоокеанскому времени, что может быть неудобно. Я предполагаю, что австралийцы были бы особенно раздражены, чтобы иметь изменение дневного значения поздним утром.
Если мы хотим исправить это, нам нужно добавить смещение от UTC до деления на секунды / день. К счастью, команда даты в Linux включает последовательность формата % z , которая сообщает о смещении от UTC. Пока стандартный формат (это результат для денверского времени, MDT):
, , , не может быть непосредственно использован в вычислениях, правильные модификаторы будут давать то, что мы хотим:
Поместите это вместе с обычными конверсиями в секундах / часах / днях, и я полагаю, что следующие должны выводить дни с 01.01.1970, причем сам 01.01.1970 будет нулевым днем, а значение будет увеличиваться в полночь по местному времени:
Это простое вычисление не будет работать для часовых поясов, которые не смещены от UTC на целые часы (например, Индия, TZ = Азия / Калькутта), поскольку «+5: 30», полученное с помощью,
date +%-:::z
приведет к ошибке «недопустимый символ в выражении» при использовании в приведенном выше заявлении.источник