将时间转换为特定时区

时间:2017-01-21 23:26:58

标签: c# datetime timezone

我正在学习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

}
}

1 个答案:

答案 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")或任何您希望将其恢复为字符串的格式。