#c# #.net-4.0 #timezone #gmt #datetime-conversion
#c# #.net-4.0 #Часовой пояс #gmt #дата и время-преобразование
Вопрос:
По сути, я хочу преобразовать время в США (время хостинга сервера) в GMT (летнее время в Великобритании)
технология C #, .NET 4.0, TimeZoneInfoClass
Подробный сценарий:
Я создаю приложение для отправки SMS.Он не должен отправлять sms с 10.00вечера до 6.30 утра по британскому времени или по Гринвичу.
Сервер находится в США или, предположим, в любой точке мира.
Итак, мой подход
- Я предполагаю, что на хостинговом сервере установлен патч автоматической регулировки дневного света. Поэтому я не проверяю переход на летнее время сервера хостинга. Это нормально??
- Он автоматически настраивается на время в США, и я получу правильное время через
UTCNow()
- Я получаю время по Гринвичу из
timezoneinfoclass
Time.UTCNow()
метода or. Теперь у меня есть правильное время UTC, и я должен проверить переход кондиционера на летнее время по времени Великобритании (целевой часовой пояс) - наконец, я проверяю параметр для целевого часового пояса (т.Е. Великобритании), например
Datetime,UTCoffset,IsDayLightSaving,SupportDaylightSaving
, на основе идентификатора машинного часового пояса (часовой пояс GMT Лондон ..). например: -timezoneid.local.searchbyma..(GMT) //* Синтаксис)if (IsDayLightSaving==true) { UTC.AddHours(1) //syntax is not correct } else { // GMT= UK time }
OS У меня есть следующие вопросы :-
- Это хороший подход или ошибочный? Каковы альтернативы?
- Должен ли я проверить переход на летнее время для часового пояса хостинга, а затем исправить смещение, добавив один час, если это летнее время??
- Есть ли бесплатные надежные веб-сервисы для получения времени по Гринвичу?
Пожалуйста, предложите
Спасибо
Комментарии:
1. Вы смотрели на класс DateTimeOffset?
2. Хорошо, я решил это с помощью класса DateTimeOffset
3. Пожалуйста, можете ли вы сказать, как вы это решили?
4. TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(«Восточное стандартное время США»); Смещение времени = tzi.GetUtcOffset(DateTime.Now); DateTime testDateTime = DateTime.Now.Add(смещение);