Я пытаюсь преобразовать метку времени в строку даты и времени ISO8601.
Например.
timestamp_as_iso8601_date=$(date --iso-8601=ns -d @1606982602015489365)
Временная метка довольно длинная, с точностью до наносекунд, и когда я использую полную временную метку, она возвращает следующую ошибку:
date: time ‘1606982602015489365’ is out of range
Ожидаемый результат должен быть: 2020-12-03T09:03:22,015489300+01:00
Когда я сократил отметку времени до этого: 1606982612
ошибка исчезла, но я потерял информацию!
Есть ли способ преобразовать метку времени без потери информации о миллисекундах?
date --iso-8601=ns -d @1606982602.015489365
Вставьте запятую:
date --iso-8601=ns -d @1606982602.015489365
Это безопасный путь? Временные метки с точностью до наносекунды отличаются по длине или можно с уверенностью предположить, что длина всегда одинакова. Я спрашиваю об этом, потому что я прочитал эти метки времени из другого источника, и мне нужно было бы разделить все входящие метки времени на девятой цифре.
Конечно, «метка времени», представленная в виде секунд с начала эпохи, будет «короче», когда дата будет закрыта для эпохи. Я имею в виду date --iso-8601=ns -d @1.123456789
. Я не понимаю. Вы спрашиваете, как вставить цифру между 10-м и 9-м символом слева? Я бы a=1606982602015489365; sed 's/[0-9]\{9\}$/.&/' <<<"$a"
но мне просто нравится sed
, подойдет любой инструмент.
The expected result should be: 2020-12-03T09:03:32,000000000+01:00
...without losing the milliseconds information?
- ожидаемый результат все равно имеет нули.