2010-09-20 180 views
2

我试图让我的第一个C#应用程序按预期工作。 :)C#程序崩溃

此应用程序是一个时间转换器,它允许用户输入数字到六个不同的文本框。例如,用户将2009放入yyyy.Text,20放入dd.Text,02放入M.text,02放入hh.Text,49放入mm.Text,35放入ss.Text。然后程序将数字转换为十六进制字符串。

例如,2009年 20 02 2时49分35秒 - > 633706949.75亿 - > E1234FB3278DC0

private void button1_Click(object sender, EventArgs e) 
     { 
      String dateString = yyyy.Text + dd.Text + M.Text + hh.Text + mm.Text + ss.Text; 
      DateTime timestamp = DateTime.ParseExact(dateString, "yyyy dd M hh:mm:ss", CultureInfo.CurrentCulture); 
      long ticks = timestamp.Ticks; 
      long microseconds = ticks/10; 
      convertedText.Text = microseconds.ToString("X"); 
     } 

应用程序被编译好的,但把数字到文本框,然后点击“转换”按钮后,该程序崩溃。错误:附加信息:字符串未被识别为有效的DateTime。

我使用错误的DataTime格式吗?或者其他的东西? :(

在此先感谢...我想要得到这份工作:)

+0

should not yyyy dd M hh:mm:ss be yyyy dd MM hh:mm:ss? – 2010-09-20 10:03:27

+0

“C#程序崩溃”怪窗口! - 你能否在未来的问题上更加明确? – balexandre 2010-09-20 10:07:18

+1

我认为你的问题是缺少空格,但你也可以考虑使用DateTime.TryParse来使你的应用程序更健壮。只是一个想法。 – 2010-09-20 11:30:35

回答

2

我觉得你的格式声明需要空格和冒号。

2

制作dateString时,不要忘记插入空格。 使用

String.Format("{0} {1} {2} {3}:{4}:{5}",yyyy.Text, dd.Text, M.Text, hh.Text, mm.Text, ss.Text) 

而且,放置一个try-catch块 - 转换时,(虽然不推荐好的程序),如果用户输入一些疯狂的数字和文字是捕捉异常的最简单方法。

0

尝试在DateTime timestamp = DateTime.ParseExact(dateString,“yyyy dd M hh:mm:ss”,CultureInfo.CurrentCulture)行上插入断点。

然后在执行该命令之前,将鼠标悬停在dateString上。那么我想你会看到dateString没有匹配你提供给ParseExact的格式。

当字符串匹配你给出的格式时,它应该可以正常工作。

祝你好运! :)

1

您的dateString不符合您指定的格式 - 您有一个没有任何分隔符(如空格或冒号)的字符串。根据您的格式对字符串进行格式化。另外,使用format utils总是一个好主意。但是,我认为你应该使用字符串,而不是字符串:

string dateString = string.Format("{0} {1} {2} {3}:{4}:{5}", 
    yyyy.Text, dd.Text, M.Text, hh.Text, mm.Text, ss.Text); 
+1

我同意格式建议。字符串与字符串不是问题。从2.0(我相信)编译器用字符串替换字符串。不再有任何功能的String类。 – 2010-09-20 10:34:12

0

试试这个

解决方案1:

private void button1_Click(object sender, EventArgs e) 
{ 
    DateTime timestamp = new DateTime( 
           Convert.ToInt32(yyyy.Text) 
           , Convert.ToInt32(M.Text) 
           , Convert.ToInt32(dd.Text) 
           , Convert.ToInt32(hh.Text) 
           , Convert.ToInt32(mm.Text) 
           , Convert.ToInt32(ss.Text)); 

    long ticks = timestamp.Ticks; 
    long microseconds = ticks/10; 
    convertedText.Text = microseconds.ToString("X"); 
} 

解决方案2:

private void button1_Click(object sender, EventArgs e) 
{ 

string dateString = string.Format("{0}/{1}/{2} {3}:{4}:{5}", M.Text,dd.Text,yyyy.Text, hh.Text, mm.Text, ss.Text); 
long ticks = Convert.ToDateTime(dateString).Ticks; 
long microseconds = ticks/10; 
convertedText.Text = microseconds.ToString("X");   
} 

Ø utput:

E1234FB3278DC0