我正在学习 C# 时区函数的工作原理,并且正在努力如何将时间转换为指定的时区。 例如,让我们采用下面的过程,其中我传入时区和时间 - 如何将该时间转换为时区中传递的时间?
string proceduredatetime = "01/11/2017 10:17:34 AM"
string tz = "P";
string convertedDT;
convertedDT = ConvertToLocalTime(proceduredatetime, tz);
Console.WriteLine("Procedure Date Time: " + proceduredatetime);
Console.WriteLine("Timezone: " + tz);
Console.WriteLine("Converted Date Time: " convertedDT);
public static string ConvertToLocalTime(string proceduredatetime, string tz)
{
String lastscantimelocalformat;
string localtz;
switch (tz)
{
case "C":
localtz = "Central Standard Time";
break;
case "E":
localtz = "Eastern Standard Time";
break;
case "M":
localtz = "Mountain Standard Time";
break;
case "P":
localtz = "Pacific Standard Time";
break;
default:
Console.WriteLine("Invalid tz.");
break;
}
if (localtz != null)
{
tzInfo ltz = tzInfo.FindSystemtzById(localtz);
//Lost on this step
}
}
如果您需要知道proceduredatetime
是什么时区。我建议从UTC开始。如果proceduredatetime
不是UTC,那么我会将其转换为UTC。
您可以将过程日期时间转换为 DateTime 对象,如下所示:
DateTime myDate = DateTime.ParseExact(proceduredatetime);
如果您正在寻找当前时间,请使用:
DateTime myDate = DateTime.UtcNow;
然后
如果myDate
是 UTC:
DateTime convertedDateTime = TimeZoneInfo.ConvertTimeUtc(myDate, TimeZoneInfo.FindSystemTimeZoneById(localtz));
如果不是 UTC,那么您可以尝试TimeZoneInfo.ConvertTime
:
DateTime convertedDateTime = TimeZoneInfo.ConvertTime(myDate, TimeZoneInfo.FindSystemTimeZoneById("SOURCE TIME ZONE"), TimeZoneInfo.FindSystemTimeZoneById(localtz));
convertedDateTime
应该是转换为指定时区的日期时间。然后,您可以执行.ToString("yyyy-MM-dd")
或任何您想要的格式以将其恢复为字符串。