如何将字符串转换为DateTime作为UTC就像那样简单

时间:2012-11-06 15:28:50

标签: c# datetime datetimeoffset

假设我有这个字符串: 如何将其转换为具有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} 我想要它 日期时间d = {10/8/2012 4:50:12 AM} 好像它会理解我希望日期尽可能简单(BTW - 我的机器在时区+02:00)

4 个答案:

答案 0 :(得分:44)

使用DateTimeOffset.Parse(string).UtcDateTime

答案 1 :(得分:0)

接受的答案对我不起作用。在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);

答案 2 :(得分:0)

source print.tcl

答案 3 :(得分:0)

我通过检查 DateTimeKind 来做到这一点。在我的函数中,有 2 种不同类型的日期时间即将到来。我想要的是从下面的函数将 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;
        }
    }