Как преобразовать строковый формат даты в миллисекунды в ос х? - PullRequest
2 голосов
/ 17 января 2020

Я бы хотел изменить 2020-01-17T07:41:53.000Z на миллисекунды в формате os X.

Как этого добиться?

Ответы [ 2 ]

1 голос
/ 18 января 2020

Дата преобразования в Ма c ОС

date '2020-01-17T07:41:53.000Z'
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

Затем из man date:

 -j      Do not try to set the date.  This allows you to use the -f flag
         in addition to the + option to convert one date format to
         another.

Реорганизация $str:

str="2020-01-17T07:41:53.000Z"
IFS='-T:.Z' read _ccyy _mm _dd _HH _MM _ss _mil <<<"$str"
date -j +%c $_mm$_dd$_HH$_MM$_ccyy.$_ss
Fri Jan 17 07:41:53 2020

Кажется, работает отлично!

epoch=$(env TZ=UTC date -j +%s $_mm$_dd$_HH$_MM$_ccyy.$_ss)
printf -v milliseconds "%s%03.0f" $epoch $milli

echo $milliseconds
1579246913000

... И просто: Забота о TZ!

0 голосов
/ 18 января 2020

Команда даты GNU date +%s.%N выведет секунды, начиная с эпохи, примерно так:

1579339833.325517439

Чтобы преобразовать данную строку в формат, описанный выше в macOS bash, вы бы Пожалуйста, попробуйте следующее:

str="2020-01-17T07:41:53.000Z"
IFS=. read datetime millisec <<< "$str"
    # split the string on "." into datetime and milliseconds
nanosec=$(( 10#${millisec%Z} * 1000000 ))
    # remove trailing "Z" from the $millisec string
    # then multiply by one million to convert to nanoseconds
printf "%s.%09d\n" $(date -d "${datetime}Z" +%s) "$nanosec"
    # convert to "epoch" with the date command and append the nanosec

Надеюсь, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...