Преобразование времени C # в GMT (летнее время Великобритании) с учетом экономии дневного света, смещение в зависимости от местоположения Великобритании и хостинга (США)

#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. Это хороший подход или ошибочный? Каковы альтернативы?
  2. Должен ли я проверить переход на летнее время для часового пояса хостинга, а затем исправить смещение, добавив один час, если это летнее время??
  3. Есть ли бесплатные надежные веб-сервисы для получения времени по Гринвичу?

Пожалуйста, предложите

Спасибо

Комментарии:

1. Вы смотрели на класс DateTimeOffset?

2. Хорошо, я решил это с помощью класса DateTimeOffset

3. Пожалуйста, можете ли вы сказать, как вы это решили?

4. TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(«Восточное стандартное время США»); Смещение времени = tzi.GetUtcOffset(DateTime.Now); DateTime testDateTime = DateTime.Now.Add(смещение);