Добавить миллисекунды к существующему времени Unix

У меня есть скрипт, который возвращает время Unix в секундах, например, 1374521719. Я хотел бы взять в это время и место миллисекунды к этому. другие должности показать простой пример с текущим временем:

echo $(($(date +%s%N)/1000000))

когда мой скрипт принимает входные данные времени Unix, как добавить к этому текущие миллисекунды (если это вообще имеет смысл)?

5
задан Community
источник

1 ответов

вы можете конвертировать Unix метку времени, что у вас есть (в секундах) в миллисекунды, а затем добавить свои миллисекунды к нему.

чтобы преобразовать секунды в миллисекунды, просто умножьте на 1000 (или добавьте "000", в зависимости от того, что удобнее).

чтобы добавить свой собственный счетчик миллисекунд, вы можете просто использовать поддержку bash для арифметических выражений. Чтобы получить текущее количество миллисекунд, прошедших через секунду, вы можете использовать дату +%N спецификатор формата, который выводит наносекунды мимо второй, и разделить на 10^6, чтобы получить миллисекунды.

собираем это вместе, если у вас уже есть скрипт или функция get_seconds, который выводит количество секунд с начала эпохи, мы получим:

echo $(( ($(get_seconds) * 1000) + ($(date +%N) / 1000000) ))

     ^^^  ^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^^
     |    |                         |_ convert ns past sec to ms
     |    |
     |    |_ convert seconds to ms
     |
     |_ bash arithmetric expression

обратите внимание, что это сочетает в себе два совершенно отдельные метки времени, так что в то время как вы получаете увеличенное количество цифр (точность), вы не получите какой-либо повышенной точности в отчетное время. На самом деле, если (скажем) что-то случится как раз на рубеже второй, первой части может относиться ко второму х, а вторая часть может касаться второе х+1, что может привести полученное значение до почти одну секунду. (Вы должны были получить X. 998 и вместо этого получили X. 002 из-за второй границы.)

честно говоря, я не понимаю, как это может быть более полезным, чем, скажем, просто добавление " 500 " к секундам, чтобы получить миллисекунды в половине секунды (вы все равно будете отключены на некоторую сумму, но вы уменьшите максимальную ошибку примерно наполовину).

2
отвечен a CVn 2013-07-22 21:31:31
источник

Другие вопросы bash time