2009-06-25 118 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进行回退。最后,我想你需要为任何非日期字符串或不支持的日期格式标记错误。