2015-09-13 5 views
0

У меня есть следующий код, который вводит ввод scheduleConfiguration.Time в UTC и возвращает ticks по местному времени.Как использовать TimeSpan в разных часовых поясах?

scheduleConfiguration.Time equal {9/13/2015 10:00:00 AM} in UTC 

var localTime = scheduleConfiguration.Time.ToLocalTime(); {9/13/2015 1:00:00 PM} in Local 
var executionTime = new TimeSpan(localTime.TimeOfDay.Ticks); 

Я изменил мой контракт данных scheduleConfiguration.Time, так что мне нужно использовать TimeSpan TimeOfDay вместо DateTime Time, но мне нужно иметь один и тот же executionTime. Так что делать дальше

var local time = DateTime.Now.Date.Add(scheduleConfiguration.TimeOfDay);//{9/13/2015 10:00:00 AM} in Local 
var executionTime = new TimeSpan(localTime.Ticks); 

Так что есть разница в 3-х часов (и я UTC +3 часовой пояс)

Как получить тот же результат, как и для DateTime в первой ситуации?

+0

хорошие вопросы! Я думаю, вам нужно создать localTime во втором варианте для UTC. Поэтому '{9/13/2015 10:00:00 AM}' должно быть в формате UTC, а не по местному времени –

+2

Вы должны проверить этот ответ: http://stackoverflow.com/questions/4331189/datetime-vs-datetimeoffset – Wouter

+0

@Wouter Как использовать DateTimeOffset в моей ситуации? – Anatoly

ответ

2

Вы должны использовать метод SpecifyKind.

var time = DateTime.SpecifyKind(DateTime.Now.Date.Add(span), DateTimeKind.Utc);  
Console.WriteLine(time.ToLocalTime()); 
Смежные вопросы