1

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

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

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

1 ответ1

2

Вы можете преобразовать имеющуюся метку времени 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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .