有关调用的详细信息,请参阅此消息的末尾实时(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月时,这也将起作用,并将导致明年在贾努里的日期。