如何修复字符串未被识别为有效的DateTime



有关调用的详细信息,请参阅此消息的末尾实时(JIT(调试,而不是此对话框。

************** Exception Text **************
System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.Convert.ToDateTime(String value)
at ExtraTutoManager.Dashcont.CulcPay(DateTime dateAf) in D:coure du soire gestionvisual studio projectExtraTutoManagerExtraTutoManage

申报全球


public DateTime rendVous;
public DateTime temp;

我想通过ToDateTime((将字符串转换为datetime,在我的项目VS中运行时没有任何问题,但在另一台电脑中,此字符串未被识别为有效的datetime

temp = Convert.ToDateTime("" + dateAf.Date.Day + "/" + (DateTime.Now.Month + 1) + "/" + DateTime.Now.Year);

这是我的方法

//Culcs
public DateTime Culcdate(DateTime dateAf)
{

int mont = DateTime.Now.Month - dateAf.Date.Month;
if (DateTime.Now.Month == dateAf.Date.Month)
{
temp = Convert.ToDateTime("" + dateAf.Date.Day + "/" + (DateTime.Now.Month + 1) + "/" + DateTime.Now.Year);
}
else if (mont - (mont - 1) >= 1 && DateTime.Now.Day >= dateAf.Date.Day)
{
temp = Convert.ToDateTime("" + dateAf.Date.Day + "/" + (DateTime.Now.Month + 1) + "/" + DateTime.Now.Year);
}
else if (mont - (mont - 1) >= 1)
{
temp = Convert.ToDateTime("" + dateAf.Date.Day + "/" + DateTime.Now.Month + "/" + DateTime.Now.Year);
}
return rendVous = temp;
}

其他计算机失败的原因可能是它们具有不同的区域性,一台计算机可能试图以美国格式MM/dd/yyyy进行解析,而另一台计算机的格式为dd/MM/yyyy。

您可以使用DateTime.ParseExact((并指定要解析的格式和区域性。

https://learn.microsoft.com/en-us/dotnet/api/system.datetime.parseexact?view=net-6.0

DateTime.ParseExact(temp, "dd/MM/yyyy", CultureInfo.InvariantCulture)

Convert.ToDateTime将考虑当前系统的Culture,因此希望字符串采用特定格式。点击此处查看更多信息:https://learn.microsoft.com/en-us/dotnet/api/system.convert.todatetime?view=net-6.0#系统转换日期时间系统字符串系统格式提供者

要使此代码在其他系统上工作,可以更改所使用的系统语言,但更好的解决方案是确保输入值为当前区域性格式,或者使用Convert.ToDateTime()的第二个参数(即IFormatProvider(来告诉系统要使用哪个区域性。这样,什么系统运行代码就不再重要了。

在你的情况下,你也可以写:

temp = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, dateAf.Date.Day)

而不是

temp = Convert.ToDateTime("" + dateAf.Date.Day + "/" + (DateTime.Now.Month + 1) + "/" + DateTime.Now.Year);

以避免将日期解析在一起。请确保在12月份时不要这样做,因为这仍然会导致无效的日期时间。

如果你只是想获得当前的DateTime+1个月,你可以这样做:

temp = DateTime.Now.AddMonths(1);

当目前的日期是12月时,这也将起作用,并将导致明年在贾努里的日期。

相关内容

  • 没有找到相关文章