2016-12-03 4 views
1

С 24 часов имеют 86400000 миллисекунды, это безопасно для вызова:Можно ли использовать оператор modulo (%) с временной отметкой эпохи unix?

timestamp % 86400000

чтобы миллисекунды прошли в течение определенного дня? timestamp - это эпоха unix, выраженная в миллисекундах, например 1480771537000.

Мне интересно, является ли это безопасным методом, учитывая, что секунды прыжка добавляются и вычитаются время от времени? Будет ли выше код всегда правильно возвращать миллисекунды в течение дня, независимо от того, что timestamp?

+0

@RyanVincent Я использую метку времени Unix, порожденную Android, который возвращает миллисекунды - спасибо за указание на то, что по книге эпоха Unix выражается в секундах. Тем не менее, это не имеет значения, рассмотрите тот же вопрос, заданный в отношении секунд. Мое использование зависит от отображения времени, оставшегося в течение дня, для выполнения операции в полночь – Voy

+0

@ RyanVincent. Да, одна из вещей, которую я пытаюсь достичь, работает некоторая логика, когда я обнаруживаю изменение с одного дня на другой. Помимо этого, мне действительно нужно знать время, которое прошло в течение дня, чтобы отобразить количество времени, оставшегося в течение дня. Обратите внимание, что я делаю это, используя временную метку NTP, а не машинные часы – Voy

+0

@RyanVincent Я сейчас пишу на Java. Благодарим за ваши предложения, но опять же эти данные не имеют значения, поскольку вопрос не требует конкретной реализации или моих вариантов использования. Это связано с теорией эпохи unix и надежностью выполнения модульной работы на временной отметке unix с учетом секунд прыжка – Voy

ответ

1

Да, вы можете использовать timestamp % 86400000 сказать, является ли отметка в полночь/начало дня (при условии, метка времени в миллисекундах так Эпохи, а не секунды).

В соответствии с this Stack Overflow answer всегда есть 86400000 миллисекунд в день, что касается времени Unix, хотя в действительности мы иногда добавляем leap seconds, так что некоторые дни на одну секунду дольше.

0

Эпоха - время по Гринвичу. Вам понадобится временная метка, включающая ваш часовой пояс. Я использую приведенный ниже код для этого:

time_t t = time(NULL); 

t = timegm(localtime(&t)); 

if(t % 86400 == 0) { 

} 
+0

Отформатируйте свой код, отложив 4 пробела. – Bugs

+0

Эй, спасибо за участие, хотя я не думаю, что это действительно отвечает на вопрос. Несмотря на это, вам не хватает объяснений и форматирования – Voy