awk нужна эпоха дней logi c для преобразования данных - PullRequest
2 голосов
/ 16 апреля 2020

В Excel, когда я даю в ячейке A1 = 1/1/1970 и A2 = сегодня (), A2 разрешается до 17 апреля 2020 года. И когда я вычитаю А2 с А1, я получаю 18369, то есть дни, когда мои логи преобразования данных c.

Я пытаюсь смоделировать ту же функциональность в awk, но не получаю целое число

$ awk ' BEGIN { t=strftime("%F",systime()); print t; gsub("-"," ",t); t2=mktime(t " 0 0 0" ); print t2/(24*60*60) } '
2020-04-17
18368.8
$

Является ли этот перевод для awk правильным ?. В чем причина разницы 0,2 в моем коде awk. Как это исправить.

1 Ответ

2 голосов
/ 16 апреля 2020

Преобразование моего комментария в ответ, чтобы решение было легко найти для будущих посетителей.

Вы видите эту разницу из-за смещения часового пояса между вашим текущим местным часовым поясом и UT C.

В более поздней версии gnu awk вы можете использовать эту функцию для передачи дополнительной функции utc-flag в mktime:

awk 'BEGIN {t=strftime("%F",systime()); print t;
     gsub("-"," ",t); t2=mktime(t " 0 0 0", 1); print t2/(24*60*60)}'

Однако, если вы используете более старые версии awk, используйте этот обходной путь, чтобы получить расчеты времени в UTC:

TZ=UTC awk 'BEGIN {t=strftime("%F",systime()); print t;
gsub("-"," ",t); t2=mktime(t " 0 0 0"); print t2/(24*60*60) } '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...