将字符串中的日期转换为具有相同格式的DateTime

时间:2013-05-10 08:19:25

标签: c#

我有一个存储日期的字符串。

String date = "03-05-2013 00:00:00";

我将其解析为Datetime,如下所示:

DateTime Start = DateTime.Parse(date);

Start.ToString()给了我"3/5/2013 12:0:00 AM"

我也用过:

DateTime Start = DateTime.ParseExact(date,"dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture);

然后,Start.ToString()给了我"3/5/2013 12:0:00 AM",这与前一个完全相同。我需要保留原始格式。我该怎么办?感谢。

3 个答案:

答案 0 :(得分:3)

您解析的格式并未规定将日期转换回字符串时DateTime的格式。当您在某个日期调用ToString时,它会从您的代码正在执行的线程的当前文化中提取格式(默认为您所在机器的文化)。

您可以通过将格式传递到ToString()

来覆盖它
Start.ToString("dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);

请参阅Custom Date and Time Formats

答案 1 :(得分:3)

您需要在ToString()来电中传递格式。

Start.ToString("dd-MM-yyy HH:mm:ss");

答案 2 :(得分:2)

  

我需要保留原始格式。

然后,当您致电ToString时,您需要再次应用相同的模式:

string formatted = Start.ToString("dd-MM-yyyy HH:mm:ss",
                                  CultureInfo.InvariantCulture);

(请注意,格式化时应指定与解析时相同的文化,以避免时间分隔符发生变化。)

请注意,对于某些格式,这仍然可能无法提供准确的原始表示形式 - 例如,如果您使用的格式包含一个月的文本,例如,它将不区分大小写,那么输入包括&# 34; MARCH"将被重新格式化为" March"。

DateTime只是一个日期和时间(以及一个"kind",但这是另一个故事) - 它没有维护文本表示不超过整数。区分值中的固有数据和该数据的文本表示非常重要。大多数具有多种可能的文本表示的类型都没有保持原始表示和#34;与数据一起。