【问题标题】:weird error: Input string was not in a correct format奇怪的错误:输入字符串的格式不正确
【发布时间】:2015-10-28 13:01:30
【问题描述】:

我收到此错误:输入字符串的格式不正确,正在尝试将值转换为日期时间或该值的一部分转换为 int。但仅限于以下值:“2025 年 8 月 5 日”。

这是我的第一个代码:

string MyFormat = "MM/dd/yyyy";  
string MyDate = string.Empty;  
MyDate = MyObject.ValueX.ToString();  
string MyFormatedDate = Convert.toDateTime(MyDate).ToString(MyFormat);

我虽然是日期时间等的格式,但后来我意识到不是因为我改变了我的代码,试图用这样的部分创建一个 DateTime 对象:

string[] Dates= MyDate.Split('/'); 
String myYear= Dates[2].ToString().Trim(); 
String myMonth= Dates[0].ToString().Trim();
String myDay= Dates[1].ToString().Trim();   
int YearInt= Convert.ToInt32(myYear); 
int MontInt= Convert.ToInt32(myMonth); 
int DayInt= Convert.ToInt32(myDay);
DateTime newDate = new DateTime(anioInt, mesInt,diaInt);

我得到了同样的错误:输入字符串的格式不正确在这一行:

int YearInt = Convert.toInt32(myYear);

当 myYear = "2025", if a do this: Convert.toInt32("2025") 我没有问题,但是为什么会出现这个异常???

这仅在这些日期时出现。

这是 MyObject 使用这个类:

[DataContract]
    public class LabelField
    {
       ..
        [DataMember(Name = "ValueX")]
        public string ValueX{ get; set; }
       ..
    }

【问题讨论】:

  • 使用调试器,你会更快地发现问题。您确定 ValueX 的价值吗?记住一个字符串不需要 ToString() (它只是有点没用)
  • 你好史蒂夫,谢谢,但我正在使用调试器 ValueX 是一个字符串,值为“8/5/2025”,问题是当我尝试使用变量进行转换时没有工作,但是在调试器中我尝试使用它工作的变量的值进行转换。这是没有意义的。像这样。转换.ToInt32(myYear);和 Convert.ToInt32("2025");
  • 您是否 100% 确定 ValueX 是您认为的字符串?

标签: c# string datetime input casting


【解决方案1】:

原来我的 ValueX 有我在调试器中看不到的不可见字符,所以我只使用 Regex.Replace 并且它现在可以工作了。

String myYear= Regex.Replace(Dates[2], @"[^\x20-\x7F]", "");
String myMonth= Regex.Replace(Dates[0], @"[^\x20-\x7F]", "");
String myDay= Regex.Replace(Dates[1], @"[^\x20-\x7F]", "");

直到我查看变量的长度时才注意到。

我希望这个解决方案可以帮助一些人:)

【讨论】:

  • 很高兴解决您的问题,但我认为您应该删除您的问题,因为它对未来的读者没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
相关资源
最近更新 更多