繁体   English   中英

C# 将带时区的字符串转换为日期时间 06:23 (UTC)

[英]C# convert string with time zone to datetime 06:23 (UTC)

我正在尝试将字符串转换为 DateTime。 该字符串包括时区。

这是HH:mm (time zone) 04:47 (CEST)的样子。

时区并不总是相同的。 我尝试过使用一系列格式,但有没有更好的方法来转换它? 我还阅读了microsoft 文档,但找不到任何转换此文档的方法

试过了

string[] formats = new[] { "HH:mm (CEST)", "HH:mm (CET)" };
var processedData = DateTime.ParseExact(
    "04:47 (CEST)",
    formats,
    CultureInfo.InvariantCulture,
    DateTimeStyles.None);

Console.WriteLine(processedData);

您可以将它们替换为时区偏移量,然后使用正确的ParseExact -format 和DateTimeStyles.AdjustToUniversal来获取通用时间(UTC):

public static void Main(string[] args)
{
    string[] inputs = { "04:47(CEST)", "14:47(CET)" };
    DateTime?[] utcTimes = Array.ConvertAll(inputs, TryParseUtcTime);
}

private static DateTime? TryParseUtcTime(string input)
{
    input = input.Replace("(CEST)", " +2").Replace("(CET)", " +1");
    if(DateTime.TryParseExact(input, "HH:mm z", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AdjustToUniversal, out DateTime dt))
    {
        return dt;
    }

    return null;
}

演示: https://dotnetfiddle.net/qKgvI1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM