2015-06-18 2 views
3

Я собираю некоторые данные от датчиков, и я получаю временную метку из него, как это:datetime.fromtimestamp vs datetime.utcfromtimestamp, какой из них безопаснее использовать?

"time": { 
      "seconds": 40, 
      "year": 115, 
      "month": 5, 
      "hours": 7, 
      "time": 1434549820776, 
      "date": 17, 
      "minutes": 3, 
      "day": 3, 
      "timezoneOffset": 420 
     }, 

У меня есть сценарий питона, который обрабатывает данные, поступающие от датчиков (входные данные в формате JSON), я беру значение time и преобразуется в формат считываемого времени.

Я datetime.fromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S') и вернулся '2015-06-17 15:03:40'

Где как datetime.utcfromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S') Возвращается: '2015-06-17 14:03:40'

Как вы можете есть час разница, поэтому мой вопрос, какой лучше использовать?

+0

сначала выходы в сообщениях не отличаются друг от друга ... во-вторых, это зависит от того, что вы хотите, хотите ли вы время в вашем местном часовом поясе или в скоординированном универсальном времени (UTC)? на самом деле это зависит от того, была ли отметка времени написана в формате UTC или по местному времени –

+0

@JulienSpronck Я думаю, что они означают, что вывод не соответствует часам: минуты: секунды в dict, даже после добавления 'timezoneOffset', это на час.Я не думаю, что для нас есть незнакомые люди в Интернете, чтобы узнать, как этот час наступил. –

+0

'utcfromtimestamp' всегда должен давать последовательные результаты, независимо от того, в каком часовом поясе вы находитесь. Но когда вы его запускаете, вы получаете' 15: 03: 40', и я получаю '14: 03: 40' - есть ли какая-то вырезать и вставить ошибку в вопрос? –

ответ

3

Глядя на ваш json, вы можете видеть, что отметка времени соответствует 2015-06-17 07:03:40 локально.

Часовой поясOffset сообщает вам, что разница между местным временем и временем UTC составляет 7 часов => время UTC, соответствующее вашему json, - 2015-06-17 14:03:40.

Поскольку это то, что вы получаете при использовании datetime.utcfromtimestamp(1434549820776/1000).strftime('%Y-%m-%d %H:%M:%S') (=> '2015-06-17 14:03:40'), это означает, что ваша метка времени написана в формате UTC, и поэтому вы должны использовать utcfromtimestamp, если хотите если быть точным.

+0

Интересно, я собирался указать, что они на самом деле получают «15: 03: 40», но когда я сам это пробовал, я тоже получаю «14: 03: 40». –

0

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

Если вы вправе решить, какое время настроено на датчики, я бы рекомендовал использовать UTC, потому что это избавит вас от любых проблем с летним временем и т. Д. Также это хорошо работает в международных командах.

Возможно, даже datetime.fromtimestamp(1434549820776/1000, timezone) является правильным ответом, если вы не можете быть уверены, что настройка часового пояса ПК работает, а датчики совпадают.

3

Оба правильные, просто они не дают вам того же времени. И предположим, что временная отметка число миллисекунд от ЭПОХИ (обычно 1/01/1970 00:00 UTC), а также:

  • fromtimestamp дать вам дату и время в местное время
  • utcfromtimestamp дает вам дату и время в UTC.

Как я не знаю, где вы живете (Великобритания?) Я не могу сказать больше, в Испании, Франции, Бельгии и Дании, местное время - UTC + 1 зимой и UTC + 2 летом.

Вы,, должны знать, требуется ли время UTC или местное время.

 Смежные вопросы

  • Нет связанных вопросов^_^