是的,C# 可以自定義時(shí)區(qū)規(guī)則。您可以使用 TimeZoneInfo
類創(chuàng)建自定義時(shí)區(qū),并為其指定規(guī)則,例如夏令時(shí)調(diào)整。
以下是一個(gè)示例,展示了如何創(chuàng)建一個(gè)自定義時(shí)區(qū),該時(shí)區(qū)比 UTC 時(shí)間慢 120 分鐘,并在 3 月的第二個(gè)星期日開始夏令時(shí),11 月的第一個(gè)星期日結(jié)束夏令時(shí):
using System;
class Program
{
static void Main()
{
// 創(chuàng)建自定義時(shí)區(qū)的規(guī)則
TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(
DateTime.MinValue, DateTime.MaxValue, TimeSpan.FromHours(1),
TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 2, DayOfWeek.Sunday),
TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 11, 1, DayOfWeek.Sunday)
);
// 創(chuàng)建自定義時(shí)區(qū)
TimeZoneInfo customTimeZone = TimeZoneInfo.CreateCustomTimeZone("Custom Time Zone", TimeSpan.FromMinutes(-120), "Custom Time Zone", "Standard Time", "Daylight Time", new[] { rule });
// 獲取當(dāng)前時(shí)間并轉(zhuǎn)換為自定義時(shí)區(qū)
DateTime currentTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, customTimeZone);
Console.WriteLine($"Current time in the custom time zone: {currentTime}");
}
}
這個(gè)示例中,我們首先創(chuàng)建了一個(gè)調(diào)整規(guī)則,該規(guī)則指定了夏令時(shí)的開始和結(jié)束時(shí)間。然后,我們使用 TimeZoneInfo.CreateCustomTimeZone
方法創(chuàng)建了一個(gè)自定義時(shí)區(qū),并將調(diào)整規(guī)則傳遞給它。最后,我們獲取當(dāng)前的 UTC 時(shí)間,并將其轉(zhuǎn)換為自定義時(shí)區(qū)的時(shí)間。
請注意,這個(gè)示例僅用于演示目的。在實(shí)際應(yīng)用中,您可能需要根據(jù)具體需求調(diào)整時(shí)區(qū)規(guī)則。