2010-09-20 178 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