2014-01-10 39 views
0

我会尝试一个例子来说明:DateTime.Parse - 改变格式

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

产生:2014年10月1日21点五十分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,与小时格式,无需任何PM

谢谢!

更新1

对不起,也许我的问题不是那么清楚,我会试着解释下面的真实情况。

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

现在,这里是一个片段:

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. stringDate22:50小时说,字符串格式化为24小时时钟。 (12时钟格式使用时间累计长达12

  2. 如果我用22点50分,在逻辑上不是该输出should'nt使用任何AM PM和12小时格式?

+0

不要在曲线中重复标记标题标题。谢谢。 –

+0

如果您需要使用第一个示例进行格式化,请存储在字符串中。 –

回答

9

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

你需要保持的格式旁边的DateTime如果你想。 A DateTime确实不是有任何概念是在一个特定的格式。由Parse返回的DateTime的值不是“2014年10月1日9:50:34” - 这是特定的日期和时间,但不是的字符串表示形式。

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

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

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. 
} 
+0

该显示器工作正常,但是当我需要解析这种格式的日期时,它会将其废弃,并进行一些内置的转换(例如更改24小时格式) –