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----转换日期-----10/10/2009

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

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

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


以下格式不会更改为 dd/mm/yyyy


16/10-dd/mm

060209 或 06022009 ddmmyyyy

13122009 mmddyyyy

20091213 yyyymmdd

20091312 yyyyddmm

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


谁能帮我解决这个问题。我对 c# 很陌生

4

7 回答 7

1

恐怕解析日期比这要复杂一些。这将取决于您的文化/国家/地区设置。查看DateTime.Parse的重载...

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

String.Format("{0:dd/MM/yyyy}", dt)
于 2009-06-25T09:26:17.000 回答
0

首先,如果您使用带有格式字符串的方法来指定您希望日期字符串出现的形式,它可能会更优雅DateTime.ToString(可以在此处找到相关信息)。

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

于 2009-06-25T09:28:05.140 回答
0

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

其余的看一下DateTime.Parse(Benjol 也提到过),它应该可以解决您在世界范围内使用的常见格式的问题。

于 2009-06-25T09:29:06.433 回答
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";
}
于 2009-06-25T09:31:06.383 回答
0

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

不幸的是,我认为这个问题没有万能的解决方案。

于 2009-06-25T09:40:23.680 回答
0

您是否可以使用“DatePicker”/日历控件而不是文本框?

例如AJAX Toolkit 日历控件

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

OP评论后更新:

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

于 2009-06-25T09:51:31.320 回答
0

感谢您给予的所有支持和指导。我找到了我的查询的解决方案

显式创建了一个新文本框,并使用 ParseExact 函数对 DateTime 值进行转换。

下面是使用的表格。替代文字 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

于 2009-06-29T06:31:44.943 回答