datetime的问题“字符串未被识别为有效的DateTime”

时间:2015-03-16 19:10:52

标签: c# string datetime

我正在使用下面的代码检查日期时间,它在我的机器上工作正常但是在部署之后,我正在

  

" String未被识别为有效的DateTime。"

请为我提供在所有机器上工作的解决方案。

DateTime date1 = DateTime.Parse("16/05"); MM/dd
string todaydate = DateTime.Now.ToString("MM/dd");

if (Convert.ToDateTime(todaydate) > Convert.ToDateTime(date1.ToString("MM/dd")))
{  //Logic }

3 个答案:

答案 0 :(得分:1)

DateTime dt = DateTime.ParseExact("16/05", "dd/MM", CultureInfo.InvariantCulture);
if (DateTime.Today > dt)
{
    // your application logic
}

答案 1 :(得分:1)

老实说,既然这两个回答并不让我满意,那么这就是我的two cent ..

让我们逐行查看您的代码;

DateTime date1 = DateTime.Parse("16/05");

DateTime.Parse默认情况下使用您的CurrentCulture设置 如果不提供任何IFormatProvider作为其超载的第二个参数。这意味着,如果CurrentCulture dd/MM FormatException中的string todaydate = DateTime.Now.ToString("MM/dd"); 包括DateTime.Now(或您当前的文化standard date and time patterns,那么DateSeparator具有替换的特殊含义我使用当前的文化日期分隔符)格式,此解析操作将成功。这意味着此行可能会抛出ToString(),这取决于当前的文化设置。

MM/dd

/返回当地时间。使用它的IFormatProvider方法,您可以尝试使用todaydate格式获取字符串表示形式。可是等等!您再次使用了05/16格式说明符,但您还没有使用任何05-16。由于此格式说明符会将当前文化日期分隔符替换为自己,因此05.16可能是Convert.ToDateTime(todaydate) Convert.ToDateTimeDateTime.Parse。这完全取决于当前文化使用的分隔日期。

IFormatProvider

CurrentCulture方法明确使用todaydate。这意味着,由于您未提供任何05/16,因此将再次使用您的05-16及其标准日期和时间格式。正如我所说,05.16可能是MM/dd"16/05"dd/MM。但无法保证您当前的文化会成功解析此字符串,因为可能没有MM/dd标准的日期和时间格式。如果它成功解析dd/MM,这意味着它具有MM/dd格式,在这种情况下,它绝对不能将01/02作为标准日期和时间格式。文化不能同时解析Convert.ToDateTime(date1.ToString("MM/dd")) todaydate格式。在这种情况下,它无法知道"05/16"字符串应解析为1月2日或2月1日,对吧?

DateTime dt;
if(DateTime.TryParseExact("16/05", "dd/MM", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
     if(DateTime.Today > dt)
     {
          // Your operation
     }
}

与此相同。作为{{1}}字符串,这将创建{{1}}(它当然取决于当前的文化日期分隔符)结果,但仍然无法保证成功解析它。

正如评论中所说的那样,没有必要将你的字符串解析为DateTime并获得相同的字符串表示。

我强烈怀疑您尝试比较当前日期是否大于解析的DateTime,您可以使用/ format separator进行比较。此属性将DateTime作为当前日期部分加上午夜作为时间部分。例如;

{{1}}

答案 2 :(得分:0)

DateTime dt = // From whatever source
if (DateTime.Now.Ticks > dt.Ticks)
{
    // Do logic
}