Обратите внимание, что хотя оптимизатор может быть способен обрезать статически известные тесты и недостижимые ветви из сгенерированного кода, компилятор все еще должен иметь возможность компилировать каждый
То есть:
int foo() {
#if 0
return std::cout << "this isn't going to work\n";
#else
return 1;
#endif
}
будет работать нормально, потому что препроцессор удаляет мертвую ветвь до того, как компилятор увидит ее, но:
int foo() {
if (std::is_integral<double>::value) {
return std::cout << "this isn't going to work\n";
} else {
return 1;
}
}
не будет. Несмотря на то, что оптимизатор может отбросить первую ветвь, она все равно не скомпилируется. Здесь используется справка enable_if
и SFINAE, потому что вы можете выбрать допустимый (компилируемый) код, а неверный (несовместимый) код «Сбой компиляции не является ошибкой».
Сам DateTime не содержит реальной информации о часовом поясе. Это может знать, является ли это UTC или локальный, но не, что локальный действительно означает.
DateTimeOffset несколько лучше - это - в основном время UTC и смещение. Однако этого все еще не действительно достаточно для определения часового пояса, поскольку много различных часовых поясов могут иметь то же смещение в любом моменте времени. Это кажется, что может быть достаточно хорошо для Вас, хотя, как все Вы взялись за работу с тем, когда парсинг даты/времени является смещением.
Поддержка часовых поясов с.NET 3.5 намного лучше, чем это было, но я действительно хотел бы видеть стандарт "ZonedDateTime" или что-то как этот - время UTC и фактический часовой пояс. Легко создать Ваше собственное, но было бы хорошо видеть его в стандартных библиотеках.
Править: Почти четыре года спустя я теперь предложил бы использовать Время Noda, которое имеет скорее более богатый набор типов даты/времени. Я смещаюсь хотя как основной автор Времени Noda :)
Нет.
разработчик А ответственен за отслеживание информацию о часовом поясе, связанную со значением DateTime с помощью некоторого внешнего механизма.
А заключают в кавычки из превосходной статьи здесь . Необходимость чтение для каждого разработчика .NET.
, Таким образом, мой совет состоит в том, чтобы записать немного класса обертки, который удовлетворяет Вашим потребностям.
Существует библиотека TimeZone общественного достояния для.NET . Действительно полезный. Это ответит на Ваши потребности.
Решение проблемы часового пояса общего случая более трудно, чем Вы думаете.
От API ( http://msdn.microsoft.com/en-us/library/system.datetime_members (По сравнению с 71) .aspx) не кажется, что он может показать название используемого часового пояса.