2014-09-26 64 views
0

我有一个字符串strdate = “25/9/2014” 在这里DD/MM/YYYY format.I要分析它的日期时间像下面字符串为datetime在C#

DateTime dt; 
      if (DateTime.TryParseExact(strDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt)) 
      { 
       dt = DateTime.Parse(strDate); 
      } 

      Console.WriteLine(dt); 

但它可以不解析,请帮助我。

+5

为什么你解析你的字符串两次? – 2014-09-26 12:13:18

+0

如果尝试解析返回true - 你已经有dt,你不需要再解析;) – Reniuz 2014-09-26 12:14:19

+2

你需要使用格式'“dd/M/yyyy”'... – petelids 2014-09-26 12:14:38

回答

2

TryParseExact需要完全匹配。

在你的情况下,尝试dd/M/yyyy作为输入是

25/9/2014 
dd/M/yyyy 
9

两件事情:

1:您的字符串格式应该是"dd/M/yyyy"(双MM将需要两个月份数字;一个M将允许1或2个月数字)。

2:您正在解析日期字符串两次。

您的代码更改为:

DateTime dt; 

if (DateTime.TryParseExact(strDate, "dd/M/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt)) 
{ 
    Console.WriteLine(dt.ToString("dd/M/yyyy")); 
} 
else 
{ 
    Console.WriteLine("Can't parse it."); 
} 

[编辑]变更Console.WriteLine命令(),以便它在特定的 “DD/M/YYYY” 格式,而不是使用本地系统区域输出。

+0

谢谢我已经试过你的code.It给我9/25/2014.But在我的字符串25是一天,9是一个月。 – Joydip 2014-09-26 12:24:49

+1

@Joydip这只是因为'Console.WriteLine(dt.ToString());((隐含的.ToString())默认为“mm/dd/yyyy”格式。如果您将其更改为'Console.WriteLine(dt.ToString(“dd/M/yyyy”));'它应该按照您的预期显示。 – 2014-09-26 12:29:26

+3

@WyattEarp Console.WriteLine(dt.ToString());并不完全是“默认”到“mm/dd/yyyy” - 结果取决于您的CurrentCulture(在这种情况下,它似乎是en-US) – Arie 2014-09-26 12:32:46

0

变化"dd/MM/yyyy""dd/M/yyyy"

因为

TryParseExact查找完全匹配