将时间转换为特定时区



我正在学习 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")或任何您想要的格式以将其恢复为字符串。

相关内容

  • 没有找到相关文章

最新更新