正如Steve 上面评论的那样,这是可行的
using System;
using System.Globalization;
public class Program {
private enum WeekOfMonth {
First = 1,
Second = 2,
Third = 3,
Fourth = 4,
Last = 5,
}
public static void Main() {
var myDate = new DateTime(2020, 3, 29, 11, 9, 0);
var myTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
Console.WriteLine(myTimeZoneInfo.SupportsDaylightSavingTime);
if (myTimeZoneInfo.SupportsDaylightSavingTime) {
bool isDaylightSavingTime = myTimeZoneInfo.IsDaylightSavingTime(myDate);
Console.WriteLine(isDaylightSavingTime);
if (isDaylightSavingTime) {
string[] monthNames = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
TimeZoneInfo.AdjustmentRule[] adjustments = myTimeZoneInfo.GetAdjustmentRules();
if (adjustments.Length == 0) {
Console.WriteLine("{0} has no adjustment rules", myTimeZoneInfo.StandardName);
}
else {
// Handle time zones with 1 or 2+ adjustments differently
bool showCount = false;
int ctr = 0;
string spacer = "";
Console.WriteLine("{0} Adjustment rules", myTimeZoneInfo.StandardName);
if (adjustments.Length > 1) {
showCount = true;
spacer = " ";
}
// Iterate adjustment rules
foreach(TimeZoneInfo.AdjustmentRule adjustment in adjustments) {
if (showCount) {
Console.WriteLine(" Adjustment rule #{0}", ctr + 1);
ctr++;
}
// Display general adjustment information
Console.WriteLine("{0} Start Date: {1:D}", spacer, adjustment.DateStart);
Console.WriteLine("{0} End Date: {1:D}", spacer, adjustment.DateEnd);
Console.WriteLine("{0} Time Change: {1}:{2:00} hours", spacer, adjustment.DaylightDelta.Hours, adjustment.DaylightDelta.Minutes);
// Get transition start information
TimeZoneInfo.TransitionTime transitionStart = adjustment.DaylightTransitionStart;
Console.Write("{0} Annual Start: ", spacer);
if (transitionStart.IsFixedDateRule) {
Console.WriteLine("On {0} {1} at {2:t}", monthNames[transitionStart.Month - 1], transitionStart.Day, transitionStart.TimeOfDay);
}
else {
Console.WriteLine("The {0} {1} of {2} at {3:t}", ((WeekOfMonth) transitionStart.Week).ToString(), transitionStart.DayOfWeek.ToString(), monthNames[transitionStart.Month - 1], transitionStart.TimeOfDay);
}
// Get transition end information
TimeZoneInfo.TransitionTime transitionEnd = adjustment.DaylightTransitionEnd;
Console.Write("{0} Annual End: ", spacer);
if (transitionEnd.IsFixedDateRule) {
Console.WriteLine("On {0} {1} at {2:t}", monthNames[transitionEnd.Month - 1], transitionEnd.Day, transitionEnd.TimeOfDay);
}
else {
Console.WriteLine("The {0} {1} of {2} at {3:t}", ((WeekOfMonth) transitionEnd.Week).ToString(), transitionEnd.DayOfWeek.ToString(), monthNames[transitionEnd.Month - 1], transitionEnd.TimeOfDay);
}
}
}
Console.WriteLine();
}
}
}
}
输出:
True
True
GMT Standard Time Adjustment rules
Start Date: Monday, January 1, 0001
End Date: Friday, December 31, 9999
Time Change: 1:00 hours
Annual Start: The Last Sunday of March at 1:00 AM
Annual End: The Last Sunday of October at 2:00 AM