我正在学习C#TimeZone功能如何工作,并且正在努力将时间转换为指定的TimeZone。例如,让我们按照以下步骤传递TimeZone和时间 - 如何将该时间转换为TimeZone中传递的时间?
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
}
}
答案 0 :(得分:1)
如果你需要知道proceduredatetime
是什么时区。我建议让UTC开始。如果proceduredatetime
不是UTC,那么我将其转换为UTC。
您可以将proceduredatetime转换为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")
或任何您希望将其恢复为字符串的格式。