我正在使用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
答案 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"));