DateTimeOffset правильное использование - PullRequest
2 голосов
/ 29 февраля 2012

Если у меня есть экземпляр DateTime, который представляет действительное время UTC, и смещение, которое преобразует этот DateTime в часовой пояс, к которому он применяется, как мне создать экземпляр DateTimeOffset для представления этого?

var utcDateTime = new DateTime(2011, 02, 29, 12, 43, 0, /*DateTimeKind.Utc*/);
var localOffset = TimeSpan.FromHours(2.0);

var dto = ...

// Here the properties should be as follows;
// dto.UtcDateTime = 2011-02-29 12:43:00
// dto.LocalDateTime = 2011-02-29 14:43:00

Возможно, я неправильно понимаю структуру DateTimeOffset, но не могу получить ожидаемый результат.

Заранее спасибо

1 Ответ

9 голосов
/ 29 февраля 2012

Похоже, что вы хотите:

var utcDateTime = new DateTime(2012, 02, 29, 12, 43, 0, DateTimeKind.Utc);
var dto = new DateTimeOffset(utcDateTime).ToOffset(TimeSpan.FromHours(2));

Обратите внимание, что я изменил год с 2011 года (который не является високосным и не имеет 29 дней в феврале) на 2012 год.

Тест:

Console.WriteLine("Utc = {0}, Original = {1}", dto.UtcDateTime, dto.DateTime);

Выход:

Utc = 2/29/2012 12:43:00 PM, Original = 2/29/2012 2:43:00 PM

Обратите внимание, что вы, вероятно, не хотите использовать свойство LocalDateTime, которое может представлять момент времени в часовом поясе локальной системы.

...