در سال جدید، حتی اگر گزینهی daylight saving time را در تنظیمات ویندوز غیرفعال کنید:
با اجرای قطعه کد زیر که سعی میکند
DateTimeOffset.UtcNow را بر اساس اطلاعات منطقهی زمانی ایران، به زمان محلی تبدیل کند:
var iranStandardTime = TimeZoneInfo.GetSystemTimeZones()
.FirstOrDefault(timeZoneInfo =>
timeZoneInfo.StandardName.Contains("Iran",
StringComparison.OrdinalIgnoreCase));
Console.WriteLine(iranStandardTime.BaseUtcOffset); // 03:30:00
var dateTime = DateTimeOffset.UtcNow;
var iranTime = TimeZoneInfo.ConvertTime(dateTime, iranStandardTime);
Console.WriteLine(iranTime); // 06/02/1402 12:34:23 ?.? +04:30 --> this is coming from the `adjustment rules`
باز هم در خروجی، درنظر گرفته شدن 4:30+ مشخص است و به همین جهت در تبدیل صورت گرفته، ساعت نهایی، یک ساعت جلوتر از ساعت واقعی خواهد بود. علت آن هم به مفهوم
dynamic daylight saving time برمیگردد که اطلاعات بیشتر آنرا
در این مطلب میتوانید مطالعه کنید.
دات نت نیز در پشت صحنه، همین اطلاعات را دریافت و تحت عنوان
Adjustment rules، مورد استفاده قرار میدهد:
همانطور که مشاهده میکنید، آخرین گزینهی پویای آن به بازهی زمانی 1402 تا سال 9378 تنظیم شدهاست و در طی این بازه، دات نت هنوز همان 4:30+ را جهت تبدیلات منطقهی زمانی ایران به رسمیت میشناسد؛ مگر اینکه در بهروز رسانیهای بعدی ویندوز، این مشکل برطرف شود و یا ... میتوانید از این وصله، جهت رفع این مشکل استفاده کنید:
پس از افزودن اطلاعات این فایل رجیستری به ویندوز، نه فقط daylight saving time غیرفعال میشود، بلکه اجزای dynamic daylight saving time نیز از سال 2023 به بعد، غیرفعال خواهند شد و اینبار دات نت، سال 1401 را سال آخر تنظیمات ساعت تابستانی درنظر میگیرد:
مابقی موارد در اینجا ذکر نشدهاند، چون به عنوان ورودی دارای daylight saving time غیرفعال تشخیص داده میشوند.
اکنون اگر مجددا همان مثال ابتدای بحث را اجرا کنیم، بجای 4:30، عدد 3:30 قابل مشاهده است.