将文本数据转换为日期

时间:2009-06-25 09:15:28

标签: c# string-formatting

我有一种情况需要将文本数据转换为日期。

我使用了以下代码来执行此操作!


        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日

12/13/2009或12/13/9 ----转换日期------- 12/13/2009

10/16 ----转换日期----------------------- 16/10/2009

2009/12/10 ----转换日期------------------ 10/12/2009


以下格式未更改为dd / mm / yyyy


一十分之十六-DD /毫米

060209或06022009 ddmmyyyy

13122009 mmddyyyy

20091213 yyyymmdd

20091312 yyyyddmm

2009年7月20日/ 2009年7月20日/ 20-07-2009 / 20-07-09


任何人都可以帮我解决这个问题。 我是c#

的新手

7 个答案:

答案 0 :(得分:1)

解析日期比这复杂一点,我担心。这取决于您的文化/国家/地区设置。查看DateTime.Parse ...

的重载

另请注意,当您输出日期时,您可以/也应该使用String.Format,如下所示:

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

答案 1 :(得分:0)

首先,如果您将DateTime.ToString方法与格式字符串一起使用,指定您希望日期字符串出现的格式,则可能会更加优雅(可以找到有关此信息的here })。

至于为什么您指定的其他格式没有正确解析为DateTime对象,您可能需要使用DateTime.Parse(string, IFormatProvider)变体并为此定义自己的IFormatProvider。您可能会发现此MSDN article可能对此有用。

答案 2 :(得分:0)

您必须为所有非标准格式编写自己的解析。像“yyyymmdd”和“yyyyddmm”这样的格式也会有问题,因为您需要用户指定输入格式是什么,否则在某些情况下您只会转换错误。

其余的请看DateTime.Parse(Benjol也提到)它应该可以解决您在世界各地使用的常见格式的问题。

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

答案 4 :(得分:0)

DateTime.Parse无法解析您指定的所有组合。我建议你首先尝试DateTime.TryParse来查看输入日期是否可解析。如果返回false,则使用ParseExact(或者更好的是,TryParseExact)来检查每个预期的日期格式。

不幸的是,我不认为这个问题有一个通用的解决方案。

答案 5 :(得分:0)

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

例如AJAX Toolkit Calendar control

这将使您无需处理用户可能指定的每种可能的日期格式。它还提供了更好的用户体验恕我直言。

OP评论后更新:

正如其他海报所建议的那样,我会使用DateTime.TryParse作为第一遍,以任何支持的标准格式处理日期字符串。然后,您需要为每个支持的非标准格式回溯DateTime.ParseExact。最后,我猜您需要为任何非日期字符串或不支持的日期格式标记错误。

答案 6 :(得分: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.mm或yyyy-dd-mm或yyyy-mm-dd

ddmmyy或mmddyy或yyddmm

dd \ mm或mm \ dd或dd.mm或mm.dd