удар: преобразуйте дату из к метке времени изменений метки времени Unix

Выполнение следующей команды в xen-серверах (или DOM0 или DOMU) на уровне $company дает мне negativ число на любом системном нуле (0) (даже в моем cygwin).

date -d "1970-01-01T00:00:00" "+%s"

$TZ сброшен, /etc/localtime тот же файл как /usr/share/zoneinfo/UTC

дата находится в версии 8.12 от GNU coreutils. Что пошло не так, как надо здесь? Какая дополнительная информация может быть необходима?

4
задан 18 March 2015 в 17:58
2 ответа

если $TZ не установлен, а /etc/localtime - UTC, то почему в команде даты вы используете часовой пояс T (Tango)?

В моей системе у меня есть локальное время EDT.

# date
Wed Mar 18 12:39:03 EDT 2015

# date -d "1970-01-01 00:00:00" "+%s"
18000

Если я заставлю его работать с танго, то получу отрицательное число:

# date -d "1970-01-01T00:00:00" "+%s"
-25200

Если я поменяю часовой пояс на UTC, то он будет работать, как и ожидалось:

# export TZ=UTC
# date
Wed Mar 18 16:41:23 UTC 2015
# date -d "1970-01-01 00:00:00" "+%s"
0

со страницы man-даты:

DATE STRING
       The  --date=STRING  is  a  mostly  free  format human readable date string such as "Sun, 29 Feb 2004 16:21:42
   -0800" or "2004-02-29 16:21:42" or even "next Thursday".  A date string may contain items indicating calendar
   date,  time of day, time zone, day of week, relative time, relative date, and numbers.  An empty string indi-
   cates the beginning of the day.  The date string format is more complex than is easily documented here but is
   fully described in the info documentation.

Как вы можете видеть, это "в основном свободный формат человека читать дату", он будет подбирать часовой пояс из любого места, где он посчитает нужным. Это очень легко проверить.

Например:

# date
Wed Mar 18 13:05:42 EDT 2015

теперь с Танго время:

[root@wailea ~]# date -d "2015-3-18T13:05:42" 
Wed Mar 18 02:05:42 EDT 2015

теперь с Танго время в конце:

[root@wailea ~]# date -d "2015-3-18 13:05:42 T" 
Wed Mar 18 02:05:42 EDT 2015

теперь Зулус время:

[root@wailea ~]# date -d "2015-3-18Z13:05:42" 
Wed Mar 18 09:05:42 EDT 2015

Я думаю, вы можете увидеть смысл. Если вы не знакомы с военными часовыми поясами, вот список: http://www.timeanddate.com/time/zones/military

Вы также можете попробовать использовать zdump, чтобы посмотреть, не является ли ваш файл зоны на самом деле тем, что вы ожидаете:

Zdump prints the current time in each zonename named on the command line.

# zdump /etc/localtime
/etc/localtime  Wed Mar 18 21:21:04 2015 EDT
2
ответ дан 3 December 2019 в 03:56

При указании даты и времени в формате ISO 8601 необходимо добавить Z, если вы хотите заставить его работать как UTC:

$ date -d "1970-01-01T00:00:00Z" "+%s"
0

В качестве альтернативы можно использовать UTC-смещение либо +0, либо -0 вместо Z.

.
0
ответ дан 3 December 2019 в 03:56

Теги

Похожие вопросы