Вопрос по c#, windows-phone-7 – Проверьте, действует ли переход на летнее время?

25

Как проверить, вступила ли в силу летнее время в Дании, если да, то добавить 1 час к моим данным, иначе нет? У меня есть XML-файл:

<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>

Ваш Ответ

7   ответов
0

если моя математика неверна. В моем случае мне просто нужно было получить смещение GMT для часового пояса независимо от того, где он был в мире.

  int timezone;

  TimeZoneInfo localZone = TimeZoneInfo.Local;

  DateTime myTime = DateTime.Now;

  bool isDayLight = TimeZoneInfo.Local.IsDaylightSavingTime(myTime);

  if (isDayLight)
            timezone = Math.Abs(localZone.BaseUtcOffset.Hours) + 1;
  else
            timezone = Math.Abs(localZone.BaseUtcOffset.Hours);

  Debug.WriteLine("timezone is " + timezone);

Я просто нашел текущее время и, если оно было в периоде дневного света, добавило +1 к смещению по Гринвичу.

Это работает с Visual Studio Express 2013.

6

TimeZoneInfo.IsDaylightSavingTime

DateTime theDate = new DateTime(2012, 5, 1); // may 1st
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate);
7

как указано выше - для Нью-Йорка, я обнаружил в отладчике, что время было установлено правильно (включая DST)

TimeZoneInfo nyTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

DateTime nyTime = GetLocalDateTime(DateTime.UtcNow, nyTimeZone);

if (nyTimeZone.IsDaylightSavingTime(nyTime))
    nyTime = nyTime.AddHours(1);

public static DateTime GetLocalDateTime(DateTime utcDateTime, TimeZoneInfo timeZone)
    {

        utcDateTime = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Utc);

        DateTime time = TimeZoneInfo.ConvertTime(utcDateTime, timeZone);

        return time;

    }
Извините, я забыл скопировать метод. Отредактировано выше
Что такоеGetLocalDateTime ?
0

call IsAmbiguous List item IsDaylightSavingTime.

if (TimeZoneInfo.Local.IsAmbiguousTime(unclearDate) || TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate)) Console.WriteLine("{0} may be daylight saving time in {1}.", unclearDate, TimeZoneInfo.Local.DisplayName);

https://msdn.microsoft.com/en-us/library/bb460642(v=vs.110).aspx

Что такоеIsAmbiguous?
@Kiquenet Если true, вы не можете сказать, только со временем, если это было летнее время или нет, время существовало как в летнее время, так и в стандартное время, например: скажем, летнее время где-то заканчивается в 2018-12-23 00:00, Итак, в этом месте 2018-12-22 23:30:00 будет неоднозначным, будет это время DST, а в 00:00 часы будут задержаны на 1 час, и будет это время снова, теперь стандартное время.
56

вам нужно преобразовать этот xml в DateTime, а затем использовать класс TimeZoneInfo.

Если Дания ваше местное время:

DateTime thisTime = DateTime.Now;
bool isDaylight = TimeZoneInfo.Local.IsDaylightSavingTime(thisTime);

Еще вам нужно получить Данию TimeZone:

DateTime thisTime = DateTime.Now;
// get Denmark Standard Time zone - not sure about that
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Denmark Standard Time");
bool isDaylight = tst.IsDaylightSavingTime(thisTime);
@Alexsandro Что совершенно понятно. Переход на летнее время в Бразилии был полным беспорядком до 2008 года, когда он наконец начал действовать 3-го воскресенья октября. До 2018 года, когда кто-либо решит, что он достаточно отсталый, чтобы изменить его на какое-то ноябрьское воскресенье.
Почему это не работает с "E". Стандартное время Южной Америки & quot; для конкретногоnew DateTime(1995, 10, 15) Дата? Вы не можете проверить это здесьdotnetfiddle.net/ilwIZu и в истории документации наpt.m.wikipedia.org/wiki/… 1995-10-15 действительно дневной свет
0

которое можно использовать во всех часовых поясах:

DateTime utcTime = DateTime.Parse("30.10.2018 18:21:34")
DateTime localtime = ConvertUTCToLocalTime(utcTime);


public static DateTime ConvertUTCToLocalTime(DateTime UTCTime)
{
    var localZone = TimeZone.CurrentTimeZone;
    var offset = localZone.GetUtcOffset,(UTCTime);
    var localTime = UTCTime.AddHours(offset.Hours);
    return localTime;
}
0

myDateTime.IsDaylightSavingTime возвращает правильное значение ... но ... оно точно по крайней мере до часа дня, просто недостаточно передать только одну дату.

Например, в этом году (2019) 3/10/2019 02:00:00 прошло, так как myDateTime вернет false, но 3/10/2013 03:00:00 вернет true.

Похожие вопросы