Преобразование даты и времени, введенного пользователем, в формат UTC

Пользователь вводит дату и время в отдельные текстовые поля. Затем я объединяю дату и время в datetime. Мне нужно преобразовать эту дату и время в UTC, чтобы сохранить ее в базе данных. У меня есть идентификатор часового пояса пользователя, сохраненный в базе данных (, они выбирают его при регистрации ). Сначала я попробовал следующее:

string userTimeZoneID = "sometimezone"; // Retrieved from database
TimeZoneInfo userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(userTimeZoneID);

DateTime dateOnly = someDate;
DateTime timeOnly = someTime;
DateTime combinedDateTime = dateOnly.Add(timeOnly.TimeOfDay);
DateTime convertedTime = TimeZoneInfo.ConvertTimeToUtc(combinedDateTime, userTimeZone);

Это привело к исключению:

The conversion could not be completed because the supplied DateTime did not have the Kind property set correctly. For example, when the Kind property is DateTimeKind.Local, the source time zone must be TimeZoneInfo.Local

Затем я попытался установить свойство Kind следующим образом:

DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Local);

Это не сработало, поэтому я попытался:

DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Unspecified);

Это тоже не сработало. Кто-нибудь может объяснить, что мне нужно делать? Я даже иду об этом правильно? Должен ли я использовать DateTimeOffset?

5
задан rikitikitik 13 August 2012 в 06:11
поделиться