2013-03-26 125 views
0

我发现在datetime数据类型以当前日期(仅日期)。日期时间解析异常

对于我做了一些谷歌搜索,并形成如下代码>>

DateTime dtCurrDate; 
dtCurrDate=DateTime.ParseExact(DateTime.Now.Date.ToShortDateString(),"MM/dd/yyyy",null); 

此代码是给我的异常,因为:

String was not recognized as a valid DateTime. 

内它是什么错误?

请帮帮我。

+1

为什么你需要'DateTime.Now.Date'是DateTime类型?对于错误,你的Shortdate格式不是'MM/dd/yyyy' – V4Vendetta 2013-03-26 07:47:39

+0

'DateTime.Now.Date.ToShortDateString()'确实输出'MM/dd/yyyy'格式的东西吗? – 2013-03-26 07:48:34

+0

我希望它与datetime格式的数据库中的expDate值进行比较。 – Freelancer 2013-03-26 07:48:43

回答

2

我相信大家都知道DateTime.Now.Date财产,这将使当前的日期与时间设置为00:00:00的。在解析

现在,你为什么有问题:

可能是因为你目前的文化,DateTime.ToShortDateString()会给你(为en-US文化):

Displaying short date for en-US culture: 
//   6/1/2009 (Short Date String) 

后来你与解析:"MM/dd/yyyy"你需要单个数字Md

因此,代码是:

dtCurrDate=DateTime.ParseExact(DateTime.Now.Date.ToShortDateString(),"M/d/yyyy",null); 

这将是更好,如果你可以的ToShortDateString()结果存储在一个字符串,然后检查你会得到什么样的格式,然后相应地解析。

+0

非常感谢... @habib – Freelancer 2013-03-26 07:55:04

+0

@Freelancer,不客气 – Habib 2013-03-26 07:56:21

+0

它给我看时间也 – Freelancer 2013-03-26 11:23:46

1

您应该知道DateTime本身没有像MM/dd/yyyydd/MM/yyyy这样的格式。它只是你的,你怎么想它显示出来,您可以通过ToString()

通过各种形式控制它可以让你的数据库值解析为DateTime喜好的问题,然后你可以只比较Date部分只有使用<instance>.Date(这有时间部分在午夜12)

2

你的格式字符串是错误的。你应该用 “d” 为标准的日期

“d”
短日期模式。

2009/6/15下午1点45分30秒 - > 2009/6/15(EN-US)

2009/6/15下午1点45分30秒 - > 15/06/2009( FR-FR)

2009/6/15下午1时45分30秒 - > 2009/06/15(JA-JP)

做参考见this msdn page

0

尝试

dtCurrDate=DateTime.Now.ToShortDateString(); 
1

您在要与当前日期的数据库来比较日期您的意见说。只有两种可能的方式来做到这一点:

  1. 在C#
  2. 在数据库

C#
你必须从数据库中选择的值。你得到一个DateTime当你这样做是正确,如:

using (SqlCommand cmd = new SqlCommand("SELECT DateColumn FROM Table", conn)) 
using (SqlDataReader reader = cmd.ExecuteReader()) 
{ 
    while (reader.Read()) 
    { 
     DateTime datecolumn = reader["DateColumn"] as DateTime? ?? DateTime.MinValue; 
     if (dateColumn.Date == DateTime.Now.Date) 
     { 
      ... 
     } 
    } 
} 

SQL
你需要传递的日期值SQL。这必须使用参数化查询完成:

using (SqlCommand cmd = new SqlCommand("....", conn)) 
{ 
    cmd.Parameters.AddWithValue("@dateParameter", DateTime.Now.Date); 
    ... 
}  
+0

只有DateTime.Now.Date会工作? – Freelancer 2013-03-26 07:56:11

+0

'DateTime.Now.Date'实际上是当天和设置为'00:00:00'的时间。当然,您需要相应地在SQL中进行比较。 – 2013-03-26 09:03:47

+0

是的,我为此目的使用日期后的%,因为在数据库中时间也存在。 – Freelancer 2013-03-26 09:05:46