20

假设我有这个字符串:如何将它转换为具有 UTC 时间的 DateTimeOffset 对象 - 意味着 -00:00 作为时区 - 即使我在特定时区的机器上运行它?

假设字符串:“2012-10-08T04:50:12.0000000”

Convert.ToDateTime("2012-10-08T04:50:12.0000000" + "Z");

--> DateTime d = {10/8/2012 6:50:12 AM} 我希望它是 DateTime d = {10/8/2012 4:50:12 AM} 好像它会明白我想要日期就这么简单(顺便说一句 - 我的机器在时区 +02:00)

4

4 回答 4

69

使用DateTimeOffset.Parse(string).UtcDateTime.

于 2012-11-06T15:32:07.987 回答
3

接受的答案对我不起作用。使用DateTimeOffset.Parse(string)DateTimeOffset.ParseExact(string).UtcDateTime转换器正确地将类型更改DateTime为 UTC,但也转换了时间。

要获得DateTime与原始字符串时间相同的时间,但在 UTC 中使用以下命令:

DateTime dt = DateTime.ParseExact(string, "yyyy-MM-ddTHH:mm:ss.fffffff",
    CultureInfo.InvariantCulture);
dt = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
于 2020-11-29T05:37:04.100 回答
0
var universalDateTime = DateTime.Parse(your_date_time_string).ToUniversalTime();
于 2020-12-17T14:32:26.070 回答
0

我通过检查来做到这一点DateTimeKind。在我的功能上,有两种不同类型的日期时间即将到来。我想要的是从下面的函数将 UTC 时间转换为本地时间。输入参数date始终为 UTC。

例如输入:2021-01-19 07:43:00 AM01/07/2021 02:16:00 PM +00:00

public static DateTime GetDateTime(string date)
    {
        try
        {
            DateTime parsedDate = DateTime.Parse(date, GetCulture()); //invarient culture

            if (parsedDate.Kind == DateTimeKind.Unspecified)
            {
                parsedDate = DateTime.SpecifyKind(parsedDate, DateTimeKind.Utc);
            }
            
            return parsedDate.ToLocalTime();
        }
        catch (Exception e)
        {
            throw;
        }
    }
于 2021-01-07T14:21:21.073 回答