将DateTime转换为此格式的最佳和最快方法是什么?
2015-03-26T18:02:58.145798Z
目前我从服务器收到一个日期,我可以解析它并将日期转换为DateTime,而ToString()输出是这样的:
26/03/2015 18:02:58
使用以下代码行转换日期:
var parsedDate = DateTime.Parse("2015-03-26T18:02:58.145798Z", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
将parsedDate转换回原始格式的最佳方法是什么?
编辑:我想将DateTime转换为此格式2015-03-26T18:02:58.145798Z为字符串
答案 0 :(得分:7)
如果您有一个DateTime
对象,可以使用O
作为格式说明符将其转换为具有该特定格式的字符串:
parsedDate.ToString("O")
或
parsedDate.ToUniversalTime().ToString("O") // if parsedDate is not UTC
返回"2015-03-26T18:02:58.1457980Z"
。
如果DateTimeKind
对象的DateTime
不是Utc
,那么根据ISO8601,您不会在字符串末尾获得Z
扩展名。在您提供的示例中,Z
存在,因为DateTime.Parse
会识别它并在DateTime
中返回Utc
。如果你解析的原始字符串中缺少Z
,你仍然可以通过在日期时间对象上使用ToUniversalTime()
来假设它的UTC。
答案 1 :(得分:4)
答案几乎是@Dirk所说的:
parsedDate.ToString("O")
是但是,你必须将DateTime转换为UTC:这就是你如何得到" Z"最后。
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.110%29.aspx。
修改强>
要将DateTime转换为UTC,请使用ToUniversalTime()
方法。
答案 2 :(得分:0)
我所知道的最快的方法是:
///<summary>Format the date time value as a parsable ISO format: "2008-01-11T16:07:12Z".</summary>
public static string ISO( this DateTime dt ) {
var ca = new char[] {
(char) ( dt.Year / 1000 % 10 + '0' ),
(char) ( dt.Year / 100 % 10 + '0' ),
(char) ( dt.Year / 10 % 10 + '0' ),
(char) ( dt.Year % 10 + '0' ),
'-',
(char) ( dt.Month / 10 + '0' ),
(char) ( dt.Month % 10 + '0' ),
'-',
(char) ( dt.Day / 10 + '0' ),
(char) ( dt.Day % 10 + '0' ),
'T',
(char) ( dt.Hour / 10 + '0' ),
(char) ( dt.Hour % 10 + '0' ),
':',
(char) ( dt.Minute / 10 + '0' ),
(char) ( dt.Minute % 10 + '0' ),
':',
(char) ( dt.Second / 10 + '0' ),
(char) ( dt.Second % 10 + '0' ),
'Z',
};
return new string( ca );
}