.NET将Datetime转换为格式可排序的日期/时间模式(“s”);

时间:2010-08-13 14:43:32

标签: c# .net datetime format

我正在使用VS2008,.NET和C#,我需要向我们的客户发送一个DATETIME变量。

问题是他们希望日期格式为可排序日期/时间模式(“s”)。

当我获得实际的日期时间时,它是一个Datetime对象。当我将其格式化为给定格式时,现在是一个String对象,它具有我想要的格式。但之后我无法使用相同格式的格式化String创建Datetime对象,因为它始终将其返回到原始日期时间格式。

更具体:

DateTime currTime = System.DateTime.Now; //(the format is "13/08/2010 09:33:57 a.m.")

String date = String.Format("{0:s}", currTime);// (wanted format "2010-08-13T09:33:57")

DateTime newDate = DateTime.Parse(date);// (original format again "13/08/2010 09:33:57 a.m.")

IFormatProvider culture = new System.Globalization.CultureInfo("", true); //(Invariant Culture)
String format = "s";                        
DateTime fecha = DateTime.ParseExact(date, format, culture); // (original format again "13/08/2010 09:33:57 a.m.")

有没有办法让Datetime对象获得所需的格式,或者Datetime对象使用给定的格式,你不能将它们格式化为等效的字符串格式?

THX

3 个答案:

答案 0 :(得分:10)

DateTime只是一个数字。它没有内在的“格式”。它只在转换为字符串时呈现为格式。因此,每当您需要将DateTime作为字符串时,您必须指定所需的格式。

String date = String.Format("{0:s}", currTime);

这可以缩短为:

String date = currTime.ToString("s");

答案 1 :(得分:5)

如果我理解正确的话,我觉得你很困惑。 DateTime对象本身不是可格式化的,它本质上只是一个数值(自DateTime.MinValue以来的刻度数或者它是什么)。

您可以将DateTime对象转换为您喜欢的任何格式的string 表示,但您不会更改实际的DateTime对象。< / p>

答案 2 :(得分:1)

每次在需要将其转换为字符串的地方使用DateTime值时(例如在string.Format()中),C#通常会调用.ToString()方法。 DateTime类型声明了一种.ToString()方法,该方法具有您不想要的格式。

但是,DateTime还有其他方法,包括.ToString(IFormatProvider provider).ToString(string format)

因此,如果将相关类似字符串的上下文中的DateTime变量的每次使用替换为调用相应.ToString重载的变量,则可以实现所需的目的,例如:

而不是

var message = string.Format("The parcel was sent on {0}.", currTime);

使用

var message = string.Format("The parcel was sent on {0}.", currTime.ToString("s"));