我需要将此字符串值(2013-05-04 13:12:20.123Z)输出为此格式的有效日期时间(dd / MM / yyyy HH:mm:ss)。
我尝试了Convert.ToDateTime,DateTime.ParseExact,DateTime.Parse,但它将我的小时改为另一个,实际上我试图了解引擎盖下发生了什么,但我没有!
任何人都可以解释一下编译器对这种格式的理解吗? Convert.ToDateTime输出这种格式的实际值?
解析它的最佳方法是什么?
答案 0 :(得分:1)
日期字符串末尾的Z
告诉DateTime.Parse
中使用的解析将时间视为UTC。
这意味着当你在本地解析时,你得到的结果是当地时间(这让我觉得你处于-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)
请注意,按照the comment的建议,将DateTimeStuyles
更改为RoundTripKind
。
答案 1 :(得分:0)
以正确的格式试用DateTime.ParseExact Method,结果会获得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");
}
输出
04/05/2013 13:12:20
答案 2 :(得分:0)
我找到的目标最简单,最短的方法是:
DateTime.Parse("2013-05-04 13:12:20.123Z").ToUniversalTime()