Мне нужно найти простой способ узнать, включена ли опция «автоматическая настройка часов для перехода на летнее время» на локальном компьютере. Если опция включена, мне нужно знать, применяется ли она в настоящее время (т. е. в настоящее время в системе летнее время). заранее спасибо
Определить, включено ли летнее время в настоящее время
Ответы (4)
Вы можете найти текущий системный часовой пояс по умолчанию и использовать ли он в настоящее время DST (летнее время) следующим образом (начиная с .NET 3.5):
TimeZoneInfo zone = TimeZoneInfo.Local;
if (zone.SupportsDaylightSavingTime)
{
Console.WriteLine("System default zone uses DST...");
Console.WriteLine("In DST? {0}", zone.IsDaylightSavingTime(DateTime.UtcNow));
}
else
{
Console.WriteLine("System default zone does not use DST.");
}
person
Jon Skeet
schedule
30.03.2012
Как насчет использования DateTime.IsDaylightSavingTime?
- person ABH; 30.03.2012
@hamad: Боже, я такого даже не видел. Лично я не стал бы использовать его, потому что а) он не говорит вам, поддерживает ли текущий часовой пояс переход на летнее время; б) вы действительно задаете вопрос, который логически касается часового пояса в определенный момент времени - гораздо более гибко использовать код, который я представил IMO; c) он не использует ужасный, давайте просто используем системный часовой пояс по умолчанию, неявно аспект
DateTime
. Я не фанат DateTime
по разным причинам...
- person Jon Skeet; 30.03.2012
Другим вариантом может быть метод DateTime.IsDaylightSavingTime
. Проверьте MSDN.
if (DateTime.Now.IsDaylightSavingTime())
Console.WriteLine("Daylight Saving");
else
Console.WriteLine("No Daylight Saving");
person
ABH
schedule
30.03.2012
Вы можете прочитать реестр, чтобы определить, установлен ли флажок или нет. Прочтите этот ключ,
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation DynamicDaylightTimeDisabled
= 0 или 1 (отключено)
Итак, что-то вроде:
Dim retval As Object = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation", "DynamicDaylightTimeDisabled", 0)
If retval IsNot Nothing Then
Select Case CInt(retval)
Case 0
Trace.WriteLine("Automatically adjust clock for Daylight Saving Time is checked")
Case 1
Trace.WriteLine("Automatically adjust clock for Daylight Saving Time is NOT checked")
End Select
End If
person
Dbadge
schedule
30.03.2012
Это сообщает, включен ли флажок, но не сообщает, действует ли в данный момент летнее время.
- person Moby Disk; 13.08.2014
возможно, это то, чего хотят некоторые из нас. Я запускаю отчет, полный дат utc, и если бы я не знал состояние этого флажка и не учитывал его, информация о часовом поясе всегда будет преобразовываться на основе его проверки.
- person John Lord; 20.05.2020
Вот еще один пример на С#
private static bool IsDayLightSavingsEnabled()
{
try
{
var result = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation", "DynamicDaylightTimeDisabled", 1);
return !Convert.ToBoolean(result); //0 - Checked/enabled, 1 - Unchecked/disabled
}
catch
{ }
return false;
}
person
Rahbek
schedule
18.04.2016