Как я устанавливаю текущее время Unix в миллисекундах?

Если бы решение IP-KVM находится в Вашем бюджете, я пошел бы для этого, особенно если у Вас есть способность удаленно инициировать циклы включения и выключения питания и т.п..

Я могу рекомендовать получить тип, который не использует густых кабелей KVM, но вместо этого использует CAT-5 и т.п.? Большими кабелями является ЛАВАШ, чтобы работать и иметь дело с, где, поскольку мы все в значительной степени привыкли к CAT-5 к настоящему времени.

Если Вы идете тем путем, сохраните себя нормальными путем цветового кодирования на кабели так, чтобы строки KVM не напоминали сетевые соединения.

Последовательные кабели действительно работают, но те, которых я использовал, восприимчивы к интерференции, плюс BIOS должен поддерживать перенаправление-к-последовательному (многие делают теперь, но всегда существует изолированная часть).

4
задан 7 December 2011 в 03:52
3 ответа

Вот решение ( Linux, НЕ Unix ):

date --set="2011-12-07 01:20:15.962"  && date --rfc-3339=ns

Обратите внимание на задержку:

CURTIME=`date --rfc-3339=ns`
date --set="${CURTIME}"    
NEWTIME=`date --rfc-3339=ns`
echo ${CURTIME}
echo ${NEWTIME}

2011-12-07 01:48:54.687216122+00:00
2011-12-07 01:48:54.720541318+00:00

Как вы заметите, целые миллисекунды задержки представлены. Это связано со временем, которое требуется для инициализации памяти и загрузки двоичного файла даты . Это верно для всех оболочек и exec для insert-high-level-language-here

Однако, если вам просто нужно субсекундное разрешение в диапазоне 10-х долей секунды, это будет хорошо во многих случаях достаточно.

4
ответ дан 3 December 2019 в 03:09

Если ваша цель - установить время с субсекундными интервалами, то дата кажется неправильной командой, если я правильно читаю исходный текст.

Предполагая, что вы используете coreutils версии date, то мне кажется, что строка when.tv_nsec = 0 устанавливает наносекундную часть переменной when , которая является структурой времени, равной нулю. Даже если бы вы могли убедить date принять более точное значение, мне это кажется бессмысленным.

  # time.h
  struct timespec
  {
    __time_t tv_sec;        /* Seconds.  */
    long int tv_nsec;       /* Nanoseconds.  */
  };

  # date.c

  struct timespec when;

  # ...

              valid_date = posixtime (&when.tv_sec,
                                      datestr,
                                      (PDS_TRAILING_YEAR
                                       | PDS_CENTURY | PDS_SECONDS));
              when.tv_nsec = 0; /* FIXME: posixtime should set this.  */
  # ...

          /* Set the system clock to the specified date, then regardless of
             the success of that operation, format and print that date.  */
          if (settime (&when) != 0)
            {
              error (0, errno, _("cannot set date"));
              ok = false;
            }
2
ответ дан 3 December 2019 в 03:09

Существует лучший метод, который не требует преобразования временной метки в удобочитаемый формат даты, как в принятом ответе. Вы были очень близки со своим первоначальным предложением:

date +"%s.%N" -s "1323217126.085882000"

При указании временных меток вам нужно ставить префикс '@', а не цитировать их:

date +"%s.%N" -s @1323217126.085882000

Теперь это будет правильно устанавливать текущее время Linux в секундах с точностью до миллисекунды.

1
ответ дан 19 August 2021 в 11:07

Теги

Похожие вопросы