2013-03-06 4 views
3

Чтобы сохранить его коротким и сладким У меня есть 2 ПК:Подстройка DateTime к DST

PC 1 имеет DST выключен

PC 2 имеет DST включен.

ПК 1 отправляет DateTime на ПК 2, который требуется и использует для установки своего времени.

Все вышеизложенное у меня есть на месте, но мои вопросы состоят в том, что, когда ПК 2 получает DateTime, как я могу проверить, нужно ли ему корректировать DST?

ПК основаны на Великобритании.

EDIT: - бит более подробно incase есть путаница. Когда ПК 2 извлекает время с ПК 1, он изменит время системы на это значение, но мне нужно убедиться, что если требуется +/- 1 час (DTS), он применяется до установки системной даты и времени.

+3

Использование UTC для настойчивости и транспорта – bryanmac

+0

Re EDIT: вы все равно можете отправить UTC вправо? Когда время UTC отправляется на другой компьютер, он знает, что это часовой пояс, чтобы он мог перевестись из хорошо известного транспорта UTC, применить его к смещению часового пояса и обновить время. – bryanmac

+0

@bryanmac Итак, давайте скажем, что я получаю UTC как объект DateTime, я просто использую это, чтобы установить системное время или вернуть его обратно, я предполагаю, время GMT? – Gaz83

ответ

2

Я бы порекомендовал использовать UTC для транспорта и прочности.

Также старайтесь не использовать дату, как критическую часть вашего алгоритма - это всего лишь данные. Даты и время сдвигаются и корректируются. Я видел приложения, что аварии, когда компьютер исправляет это время :)

Вот еще один пост с дополнительной информацией по данной теме: Daylight saving time and time zone best practices

0

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

Если вам просто нужно убедиться, что вы говорите об одном и том же моменте времени, используйте DateTime с .Kind = DateTimeKind.Utc, например, из DateTime.UtcNow.

Если вам действительно нужно знать, что PC1 считал, что это был один раз, в то время как PC2 считал, что это был другой, и вы все еще хотите знать, что эти две вещи представляют один и тот же момент времени, а затем используйте DateTimeOffset. Это будет включать локальную дату и время компьютера, а также смещение от UTC, которое представляет собой дату и время.

При любом подходе вы должны использовать формат ISO8601 для транспорта и настойчивости, чтобы ваш смысл был ясен независимо от культуры или часового пояса наблюдателя. В .Net это получается с .ToString("o") либо из DateTime, либо DateTimeOffset.

UTC DateTime в ISO8601 формате будет выглядеть следующим образом:

2013-03-06T09:00:00Z 

DateTimeOffset в ISO8601 формате будет выглядеть следующим образом:

2013-03-06T10:00:00+01:00 

.Net называет это Round Trip модель - потому что предназначенные для конкретной цели, описанной вами.

Дальнейшие разъяснения - DateTimeOffset - см. this post.

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