2009-06-25 161 views
0

我遇到需要將文本數據轉換爲日期的情況。將文本數據轉換爲日期

我已經使用下面的代碼來做到這一點!


 string s = textBox1.Text; 
     if (String.IsNullOrEmpty(s)) 
     { 
      textBox2.Text = "Please enter any date."; 

     } 
     else 
     { 
      DateTime dt = DateTime.Parse(s); 
      string day = dt.Day.ToString(); 
      string month = dt.Month.ToString(); 
      string year = dt.Year.ToString(); 
      s = day + "/" + month + "/" + year; 
      textBox2.Text = s; 
     } 

這將改變只有下面的數據格式。


10/10/09或10/10/2009 ----轉換日期2009/10/10 ------

2009/12/13或12/13/9 ----轉換日期------- 12/13/2009

10/16 ----轉換日期------------------- ---- 16/10/2009

2009/12/10 ----轉換日期------------------ 10/12/2009


種下列格式沒有得到改變爲DD /月/年


一十分之十六-DD /毫米

060209或06022009 DDMMYYYY

13122009 MMDDYYYY

20091213 YYYYMMDD

20091312 yyyyddmm

20.07.2009/20.07.2009/20-07-2009/20-07-09


任何人都可以幫助我解決這個問題。 我對c很陌生#

+0

你無法確定yyyymmdd和yyyyddmm之間的區別,或者ddmmyyyy和mmddyyyy之間的區別20010102與01022001一樣不明確。 – 2009-06-25 09:28:00

回答

0

非常感謝您的支持和指導。 我已經找到了解決方案我的查詢

顯式創建一個新的文本框,並使用ParseExact函數DateTime值進行轉換。

下面是使用的表格。 alt text http://img146.imageshack.us/img146/2107/form.jpg

代碼編寫下面


private void button1_Click(object sender, EventArgs e) 

     { 
     string s = textBox1.Text;   
     string DFF = textBox3.Text;   

     //To check whether field is empty 

     if (String.IsNullOrEmpty(s)) 
     { 
      MessageBox.Show("Please enter correct date"); 
      textBox2.Text = "Enter correct date"; 
     }   
     else 
     { 
      DateTime dt = DateTime.ParseExact(s, DFF, null); 
      textBox2.Text = dt.ToShortDateString(); 
     } 

    } 

該代碼將給出輸出用於所有日期類型:

DD.MM.YYYY或DD-MM-yyyy或DD \ mm \ yyyy

mm.dd.yyyy或mm-dd-yyyy或mm \ dd \ yyyy

yyyy.mm.dd或yyyy-mm-dd或yyyy \ mm \ dd

yyyy.dd.毫米或yyyy-DD-MM或YYYY-MM-DD

DDMMYY或MMDDYY或yyddmm

DD \毫米或毫米\ DD或dd.mm或MM.DD

1

解析日期比這更復雜一點,恐怕。這將取決於你的文化/國家設置。看看重載DateTime.Parse ...

還要注意的是,當你輸出你的約會,你可以/應該也使用String.Format,就像這樣:

String.Format("{0:dd/MM/yyyy}", dt) 
0

首先,它很可能是,如果你更優雅要使用格式字符串使用DateTime.ToString方法,該格式字符串指定您希望日期字符串出現的格式(有關此信息,請參閱here)。

至於爲什麼您指定的其他格式沒有正確解析爲DateTime對象,您可能需要使用DateTime.Parse(string, IFormatProvider)變體併爲此定義您自己的IFormatProvider。你可能會發現這個MSDN article可能對此有用。

0

您必須爲所有非標準格式編寫自己的解析。像「yyyymmdd」和「yyyyddmm」這樣的格式也會產生問題,因爲您需要用戶指定輸入格式,或者在某些情況下您只是將其轉換爲錯誤。

其餘的看看DateTime.Parse(Benjol也提到過),它應該解決您在世界各地使用的常見格式的問題。

0

您可以使用DateTime.ParseExact

例如:

DateTime.ParseExact("20090823", "yyyyMMdd", null);  
DateTime.ParseExact("16/10", "dd/MM", null); 

編輯: 使用DateTime.TryParse(或DateTime.TryParseExact)來驗證輸入的日期。

DateTime date; 
string error = ""; 
if (!DateTime.TryParse("12978434", out date)) 
{ 
    error = "Invalid date"; 
} 
+0

這不起作用。我想你必須指定一個合適的IFormatProvider或ICultureInfo。 – jpoh 2009-06-25 09:36:06

+0

我在我的機器上使用了null。想想我會在這一個上做更多的調查。 – Castrohenge 2009-06-25 10:15:59

0

DateTime.Parse無法解析您指定的所有組合。我建議你先嚐試使用DateTime.TryParse來查看輸入日期是否可以解析。如果返回false,則使用ParseExact(或更好,TryParseExact)來檢查每個預期的日期格式。

不幸的是,我不認爲有這個問題的一個通用解決方案。

0

是否可以使用'DatePicker'/ Calendar控件而不是TextBox?

AJAX Toolkit Calendar control

這將消除需要你必須處理每一個可能的日期格式的用戶可能會指定。它還提供了更好的用戶體驗恕我直言。 OP評論後

更新:

正如其他海報建議,我會用DateTime.TryParse作爲第一關,以處理任何支持標準格式的日期字符串。然後,您需要針對每種受支持的非標準格式對DateTime.ParseExact進行回退。最後,我想你需要爲任何非日期字符串或不支持的日期格式標記錯誤。