Для начала, я бы предложил использовать DateTime.ParseExact
или TryParseExact
- мне не ясно, будет ли ваш образец 2 декабря или 12 февраля.Указание формата может привести к удалению FormatException
.
Следующая проблема - определить, в какой часовой пояс вы хотите преобразовать его - вы говорите, что 11:58 - это местное времяв каком-то часовом поясе или уже по времени UTC?
- Если это местное время в часовом поясе кода, который его выполняет, вы можете использовать
DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal
сделать это как часть синтаксического анализа. - Если это уже универсальное время, используйте
DateTimeStyles.AssumeUniversal
- Если это местное время в другом часовом поясе, вам нужно будет использовать
TimeZoneInfo
для выполнения преобразования.
Кроме того, если вы используете местное время, вам нужно рассмотреть два угловых случая (при условии, что вы используете часовой пояс, в котором наблюдается переход на летнее время).время):
- Местное время может быть пропущено из-за переходов DST, когда часы идут вперед.Поэтому, если часы пропускают с 1:00 до 2:00, то 1:30 утра вообще не существует.
- Местное время может быть неоднозначным из-за переходов DST, когда часы возвращаются назад.Поэтому, если часы возвращаются с 2:00 до 1:00, то 1:30 утра происходит дважды в разное время UTC - какое событие вас интересует?
Вы должны решить, как хотитечтобы справиться с этими случаями и убедиться, что они включены в ваши модульные тесты.
Другой вариант - использовать мою библиотеку даты и времени, Noda Time , которая разделяет понятия "локальный".дата / время "и" дата / время в определенном часовом поясе "(и другие) более явно.