Как Миллер может преобразовать местную дату и время в UTC?
Как Miller 5.6.2 преобразовать местную дату и время в UTC
используя выражение более простое, чем следующее?
$ printf "time1\n2019-06-13 05:54 PM\n" | mlr --csv put '
$time1=sec2gmt(
localtime2sec(
strftime(
strptime($time1, "%Y-%m-%d %H:%M %p"),
"%Y-%m-%d %H:%M:%S")));'
time1
2019-06-13T10:54:00Z
Обратите внимание, что мой местный часовой пояс в июне: EDT
или -04:00
:
$ date --date='2019-06-13 05:54 PM' '+%Y-%m-%dT%H:%M:%S %Z'
2019-06-13T17:54:00 EDT
$ date --date='2019-06-13 05:54 PM' '+%Y-%m-%dT%H:%M:%S%z'
2019-06-13T17:54:00-0400
1 ответ
Я нашел два похожих выражения, оба из которых используют strptime_local()
вместо того strptime()
для синтаксического анализа локальной строки даты и времени и преобразования ее в секунды с начала эпохи в формате UTC (GMT):
$ printf "time1\n2019-06-13 05:54 PM\n" | mlr --csv put '
$time1=strftime(
strptime_local($time1, "%Y-%m-%d %H:%M %p"),
"%Y-%m-%dT%H:%M:%SZ");'
time1
2019-06-13T10:54:00Z
$ printf "time1\n2019-06-13 05:54 PM\n" | mlr --csv put '
$time1=sec2gmt(strptime_local($time1, "%Y-%m-%d %H:%M %p"));'
time1
2019-06-13T10:54:00Z
И то и другое strftime()
а также sec2gmt()
принять аргумент в секундах с начала эпохи в формате UTC.
Функция strptime()
принимает входную строку даты и времени в формате UTC и игнорирует часовой пояс во входной строке:
$ printf "time1\n2019-06-13 05:54 PM\n" | mlr --csv put '
$time1=strptime($time1, "%Y-%m-%d %H:%M %p");'
time1
1560405240.000000
$ printf "time1\n2019-06-13 05:54 PM EDT\n" | mlr --csv put '
$time1=strptime($time1, "%Y-%m-%d %H:%M %p %Z");'
time1
1560405240.000000
Функция strptime_local()
также игнорирует часовой пояс во входной строке даты и времени, но предполагает, что строка находится в местном часовом поясе, и преобразует ее в UTC:
$ printf "time1\n2019-06-13 05:54 PM\n" | mlr --csv put '
$time1=strptime_local($time1, "%Y-%m-%d %H:%M %p");'
time1
1560423240.000000
$ printf "time1\n2019-06-13 05:54 PM EDT\n" | mlr --csv put '
$time1=strptime_local($time1, "%Y-%m-%d %H:%M %p %Z");'
time1
1560423240.000000
$ printf "time1\n2019-06-13 05:54 PM EST\n" | mlr --csv put '
$time1=strptime_local($time1, "%Y-%m-%d %H:%M %p %Z");'
time1
1560423240.000000
$ printf "time1\n2019-06-13 05:54 PM AUT\n" | mlr --csv put '
$time1=strptime_local($time1, "%Y-%m-%d %H:%M %p %Z");'
time1
1560423240.000000