我需要将此字符串值 (2013-05-04 13:12:20.123Z) 输出到此格式的有效日期时间 (dd/MM/yyyy HH:mm:ss)。
我尝试了 Convert.ToDateTime、DateTime.ParseExact、DateTime.Parse 但它把我的 Hour 更改为另一个,实际上我试图了解引擎盖下发生了什么,但我没有!
任何人都可以向我解释编译器对这种格式的理解吗?Convert.ToDateTime 输出这种格式的真实值?
哪个是解析它的最佳方法?
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)
请注意,按照马特评论的建议将 更改为DateTimeStuyles
。RoundTripKind
尝试使用正确格式的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
我发现的最简单和最短的目标方法是:
DateTime.Parse("2013-05-04 13:12:20.123Z").ToUniversalTime()