如何修复字符串未被识别为有效的日期时间
how to fix string was not recognized as a valid 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 gestion\visual studio project\ExtraTutoManager\ExtraTutoManage
声明全局
public DateTime rendVous;
public DateTime temp;
我想通过 ToDateTime() 将字符串转换为日期时间,在我的项目 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://docs.microsoft.com/en-us/dotnet/api/system.datetime.parseexact?view=net-6.0
DateTime.ParseExact(temp, "dd/MM/yyyy", CultureInfo.InvariantCulture)
Convert.ToDateTime
将考虑当前系统文化,因此期望字符串采用特定格式。
在此处查看更多信息:
https://docs.microsoft.com/en-us/dotnet/api/system.convert.todatetime?view=net-6.0#System_Convert_ToDateTime_System_String_System_IFormatProvider_
要使此代码在其他系统上运行,您可以更改使用的系统语言,但更好的解决方案是确保输入值采用当前文化格式,或者使用第二个参数 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);
以避免将日期一起解析。请确保不要在十二月时执行此操作,因为这仍然会导致日期时间无效。
如果您只是想获得当前日期时间 + 1 个月,您可以这样做:
temp = DateTime.Now.AddMonths(1);
当当前日期是 12 月时也可以使用,并会导致下一年的 1 月的日期。
有关调用的详细信息,请参阅此消息的末尾 实时 (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 gestion\visual studio project\ExtraTutoManager\ExtraTutoManage
声明全局
public DateTime rendVous;
public DateTime temp;
我想通过 ToDateTime() 将字符串转换为日期时间,在我的项目 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://docs.microsoft.com/en-us/dotnet/api/system.datetime.parseexact?view=net-6.0
DateTime.ParseExact(temp, "dd/MM/yyyy", CultureInfo.InvariantCulture)
Convert.ToDateTime
将考虑当前系统文化,因此期望字符串采用特定格式。
在此处查看更多信息:
https://docs.microsoft.com/en-us/dotnet/api/system.convert.todatetime?view=net-6.0#System_Convert_ToDateTime_System_String_System_IFormatProvider_
要使此代码在其他系统上运行,您可以更改使用的系统语言,但更好的解决方案是确保输入值采用当前文化格式,或者使用第二个参数 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);
以避免将日期一起解析。请确保不要在十二月时执行此操作,因为这仍然会导致日期时间无效。
如果您只是想获得当前日期时间 + 1 个月,您可以这样做:
temp = DateTime.Now.AddMonths(1);
当当前日期是 12 月时也可以使用,并会导致下一年的 1 月的日期。