C#中的ISO 8601日期格式

9

我可以将DateTime.Now格式化为:

2010-03-01T00:00:00Z

我已经使用这个来格式化日期部分。
DateTime.Now.Subtract(new TimeSpan(3001, 0, 0, 0)).GetDateTimeFormats()[5]
6个回答

14

以下所有示例假设本地时间是伦敦时间,在2009年6月11日下午5:11。

如果您想使用完整的ISO 8601格式,可以使用:

DateTime.Now.ToUniversalTime().ToString("o")
// Gives 2009-06-11T16:11:10.5312500Z

如果您想指定时区偏移量,请使用以下方式:

DateTime.Now.ToString("o")
// Gives 2009-06-11T17:11:10.5312500+0100

如果您不需要精确到小数秒,可以使用以下方法:

DateTime.Now.ToUniversalTime().ToString("s") + "Z"
// Gives 2009-06-11T16:11:10Z

或:
DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssK")
// Also gives 2009-06-11T16:11:10Z
请注意以下内容是错误的,因为它给出的是当地时间,而不是 UTC 时间,只有当你身处像伦敦这样的地方,在冬季中间才是正确的:
DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ")
// Gives 2009-06-11T17:11:10Z which is wrong as it is an hour out.

那么“:ssK”中的K是什么意思?我找不到任何相关文档。无论是在http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx还是http://msdn.microsoft.com/en-us/library/az4se3k1.aspx,甚至是通过谷歌搜索“DataTime ToString 'ssK'”,都没有找到答案。 - Jeroen Wiert Pluimers
1
K代表“时区信息”。文档位于此页面http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx,或者特定部分的链接http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#KSpecifier。 - Martin Brown

4
非常简单,只需要使用符合您要求的格式字符串即可:
System.DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
'2009-06-11T16:26:47Z'

啊,我不知道“ToUniversalTime”。太棒了。据我所知,这里的最终结果与仅执行DateTime.UtcNow.ToString(YOUR_FORMAT)相同。也就是说:DateTime.Now.ToUniversalTime() == DateTime.UtcNow。 - Brent Rittenhouse

4

2
我想你需要这个:

我猜你想要这个:

 XmlConvert.ToString(yourdate)

这将产生与.ToString("o")相同的结果,可能是2009-06-11T17:11:10.5312500+0100,这可能是或可能不是OP想要的。 - Martin Brown
如果您想强制使用UTC,可以使用XmlConvert.ToString(DateTime.Now, XmlDateTimeSerializationMode.Utc)。 - Martin Brown

0

这不会将 Z 放在末尾。 - Martin Brown

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接