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

我使用了以下代码来做到这一点!


        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/毫米

060209 或 06022009 ddmmyyyy

13122009 mmddyyyy

20091213年年月日

20091312年年月日

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


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

有帮助吗?

解决方案 7

感谢所有支持和指导下,你PPL了。 我已经找到了解决办法,以我的查询

一个新文本框被显式地创建,并使用ParseExact起作用DateTime值是由转换。

下面是其中使用形式替代文字HTTP://img146.imageshack页面没有自动跳转/ 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 \毫米\ YYYY

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

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

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

DDMMYY或MMDDYY或yyddmm

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

其他提示

解析日期比这更复杂一点,我害怕。这将取决于你的文化/国家设置。看看重载 DateTime.Parse ..

另外请注意,当你输出你的约会,你可以/应该也使用的的String.Format 时,像这样:

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

首先,如果您使用 DateTime.ToString 带有格式字符串的方法,指定您希望日期字符串出现的形式(有关这方面的信息可以找到 这里).

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

您必须编写自己的分析对所有非标准格式。另外格式,如“年月日”和“yyyyddmm”将是有问题的,因为你将需要用户指定什么输入格式或者你只是在错误的转换在某些情况下。

有关其余看一看 DateTime.Parse (也由Benjol提到的)它应该解决问题为在世界各地使用的通用格式。

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

不幸的是,我不认为有一个尺寸适合所有人的解决了这个问题。

您可以使用 DateTime.ParseExact

例如:

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

编辑:使用 日期时间.TryParse (或者 日期时间.TryParseExact) 来验证输入的日期。

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

时,你有可能使用“的DatePicker” /日历控件,而不是一个TextBox的?

例如 AJAX工具包日历控制

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

<强> OP注释后更新:

作为其他的海报所建议的,我会用DateTime.TryParse作为第一通,以处理任何所支持的标准格式的日期字符串。然后,你就需要在DateTime.ParseExact后备每个支持非标准格式。最后,我想你需要标记任何非日期字符串或unspported日期格式错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top