Преобразование DateTime + TimeZone в UTC - PullRequest
2 голосов
/ 06 июля 2011

Как я могу получить универсальное время для указанной TimeZone, учитывая объект DateTime?Мое приложение (таймер) просит пользователя указать время и часовой пояс, и мне нужно сохранить UTC на основе указанных значений времени + часового пояса.

Например, пользователь A указывает
DateTime: 06.07.2011 7:30 AM TimeZone: восточное стандартное время (-5: 00).

Пользователь B указывает:
DateTime: 06/06/2011 17:00 PM TimeZone: стандартное время Индии (+5: 30).

Я полагаю, что UTC для обоих вышеуказанных значений DateTime будет одинаковым, и оба вышеуказанных таймерапроизойдет в то же время.Проблема в том, как получить UTC для сохранения в базе данных?Я не могу получить соответствующие UTC для вышеуказанных значений даты и времени.

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

Вы можете использовать DateTime в сочетании с TimeZoneInfo:

var utc = TimeZoneInfo.ConvertTimeToUtc(dateTimeAsEnteredByUser,
                                        timeZoneChosenByUser);

Вам необходимо убедиться, что для свойства Kind dateTimeAsEnteredByUser установлено значение DateTimeKind.Unspecified.

КСТАТИ:
Два раза вы указали не то же самое. Первый - 12:30 UTC, второй - 11:30 UTC. Кроме того, 17:00 вечера не существует, это либо 17:00, либо 5:00 вечера.

1 голос
/ 06 июля 2011

Преобразование в Utc:

DateTime utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone);
...