我正在使用下面的代码检查日期时间,它在我的机器上工作正常但是在部署之后,我正在
" 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 }
答案 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.ToDateTime
或DateTime.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
}