DateTime.Parse - 更改格式

时间:2014-01-10 19:59:50

标签: c# datetime datetime-format

我将尝试举例说明:

var dateNow = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

产生:10/01/2014 21:50:34

var dateNowParse = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"));

产生:10/01/2014 9:50:34 PM

问题:

如何解析日期,并保持格式如下: dd / MM / yyyy HH:mm:ss 24 小时格式,没有任何PM

谢谢!

更新1

对不起,也许我的问题不太清楚,我会尝试解释下面的实际情况。

请不要关注DateTime.Now的真实含义,假设我们有一个string变量格式为10/01/2014 21:50:34,然后我尝试解析它,并将结果存储在另一个变量。我愿意实现的是将结果保存在具有确切格式10/01/2014 21:50:34的DateTime变量中。

现在这里是一个片段:

var stringDate = "10/01/2014 22:50:30";
DateTime parsedDate = DateTime.Parse(stringDate, CultureInfo.InvariantCulture);
//parsedDate result is: 10/01/2014 10:50:30 PM

让我感到沮丧的是:

  1. stringDate中,22:50小时表示字符串的格式为24小时。 ( 12时钟格式使用小时计数器,最多12个

  2. 如果我使用22:50,逻辑上不是输出不应该使用任何AM PM和12小时格式吗?

2 个答案:

答案 0 :(得分:9)

  

如何解析日期,并保持格式

如果您愿意,您需要将格式与DateTime保持一致。 DateTime使具有任何特定格式的概念。 DateTime返回的Parse的值不是“10/01/2014 9:50:34 PM” - 这是特定的日期和时间,但不是 a字符串表示。

您可以使用一种类型将两者保持在一起 - 或者如果您始终希望以相同的方式进行格式化,则只需在格式化时明确指定该格式,而不将其保留为DateTime值的数据。 / p>

就个人而言,我会尽可能坚持DateTime.ParseExact,因为我发现它更容易预测它会做什么 - 但它确实取决于你的输入。如果输入的是您期望的特定格式,ParseExact确实是前进的方向,可能采用不变的文化来避免任何文化差异。

答案 1 :(得分:1)

我现在将日期存储为日期

DateTime dateNow = DateTime.Now;

然后当你需要用那种格式显示它

String strNow = dateNow.ToString("dd/MM/yyyy HH:mm:ss");

如果你有一个格式在一个字符串变量strNow中的日期,并希望将它放在DateTime中我会确保捕获格式异常

DateTime dateNow;

try {
dateNow = DateTime.ParseExact(strNow, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
}
catch (FormatException) {
//Log something or set a default date.
}