-2

我需要将此字符串值 (2013-05-04 13:12:20.123Z) 输出到此格式的有效日期时间 (dd/MM/yyyy HH:mm:ss)。

我尝试了 Convert.ToDateTime、DateTime.ParseExact、DateTime.Parse 但它把我的 Hour 更改为另一个,实际上我试图了解引擎盖下发生了什么,但我没有!

任何人都可以向我解释编译器对这种格式的理解吗?Convert.ToDateTime 输出这种格式的真实值?

哪个是解析它的最佳方法?

4

3 回答 3

1

Z日期字符串末尾的 告诉用于将时间视为 UTC 的解析DateTime.Parse

这意味着当你在本地解析它时,你得到的结果是本地时间(这让我猜你是在一个-05:00时区。

如果您必须在实例中具有完全相同的值,则DateTime可以使用ParseExact并将其Z视为文字:

DateTime.ParseExact("2013-05-04 13:12:20.123Z", 
                    "yyyy-MM-dd HH:mm:ss.fff'Z'",
                    CultureInfo.InvariantCulture, 
                    DateTimeStyles.RoundTripKind)

请注意,按照马特评论的建议将 更改为DateTimeStuylesRoundTripKind

于 2013-06-07T19:14:40.233 回答
0

尝试使用正确格式的DateTime.ParseExact 方法DateTime,您将得到结果。

然后您可以再次使用第二种格式调用DateTime.ToString

string input = "2013-05-04 13:12:20.123Z";
string format = "yyyy-MM-dd HH:mm:ss.fffZ";

DateTime dt;
if (DateTime.TryParseExact(input, format, CultureInfo.InvariantCulture,
            DateTimeStyles.AdjustToUniversal ,out dt))
{
    var result = dt.ToString("dd/MM/yyyy HH:mm:ss");
}

输出是

2013 年 4 月 5 日 13:12:20

于 2013-06-07T19:12:29.350 回答
0

我发现的最简单和最短的目标方法是:

DateTime.Parse("2013-05-04 13:12:20.123Z").ToUniversalTime()
于 2013-06-07T19:34:06.450 回答