C#程序崩溃

时间:2010-09-20 10:01:42

标签: c#

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

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

例如, 2009 20 02 02:49:35 - > 63370694975000000 - > 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格式吗?或者其他的东西? :(

提前致谢...我想让这个工作:)

5 个答案:

答案 0 :(得分:2)

我认为你需要以格式声明的空格和冒号。

答案 1 :(得分:2)

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

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

并且,放置一个try-catch块 - 这是在转换时捕获异常的最简单方法,(尽管不建议用于好的程序),以防用户输入一些疯狂的数字和文本。

答案 2 :(得分: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);

答案 3 :(得分:0)

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

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

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

祝你好运! :)

答案 4 :(得分: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");        
} 

<强>输出:

E1234FB3278DC0