Как проверить, действовала ли в Дании дневная экономия времени, если да, то добавьте 1 час к моим данным, иначе нет? У меня есть xml файл:
<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
Как проверить, действовала ли в Дании дневная экономия времени, если да, то добавьте 1 час к моим данным, иначе нет? У меня есть xml файл:
<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
Думаю, вам нужно преобразовать этот 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);
Когда я кодировал, как указано выше - для Нью-Йорка, я обнаружил в отладчике, что время было установлено правильно (включая 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;
}
Вы можете использовать TimeZoneInfo.IsDaylightSavingTime
DateTime theDate = new DateTime(2012, 5, 1); // may 1st
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate);
Вот общий тест и с удовольствием исправляем, если моя математика неверна. В моем случае мне просто нужно было получить смещение по 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);
Я просто нашел текущее время, и если бы это было в Day Light Savings период добавил +1 к GMT GMT.
Это работает с Visual Studio Express 2013.
Вам нужно сделать две вещи:
IsAmbiguous
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
это мое короткое решение, которое можно использовать во всех часовых поясах:
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;
}