将文本数据转换为日期

发布于 2024-07-25 15:18:14 字数 1054 浏览 7 评论 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# 很陌生

I have a situation in which I need to convert a text data into date.

I have used the following code to do so!


        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;
        }

This will change only the following formats of data.


10/10/09 or 10/10/2009----converted date------10/10/2009

12/13/2009 or 12/13/9----converted date-------12/13/2009

10/16----converted date-----------------------16/10/2009

2009/12/10----converted date------------------10/12/2009


The following formats are not getting changed to dd/mm/yyyy


16/10-dd/mm

060209 or 06022009 ddmmyyyy

13122009 mmddyyyy

20091213 yyyymmdd

20091312 yyyyddmm

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


Can anyone help me out with this.
I am very new to c#

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

萌辣 2024-08-01 15:18:14

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

请注意,当您输出日期时,您还可以/应该使用 String.Format,像这样:

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

Parsing dates is a bit more complicated than that, I'm afraid. It will depend on you culture/country settings. Look at the overloads for DateTime.Parse...

Also note that when you output your date, you could/should also use String.Format, like so:

String.Format("{0:dd/MM/yyyy}", dt)
流云如水 2024-08-01 15:18:14

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

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

Firstly, it would probably be more elegant if you were to use the DateTime.ToString method with a format string specifying the form that you want the date string to appear in (information on this can be found here).

As for why the other formats that you specified are not being parsed into a DateTime object correctly, you probably need to use the DateTime.Parse(string, IFormatProvider) variant and define your own IFormatProvider for this. You might find this MSDN article might be useful for this.

听你说爱我 2024-08-01 15:18:14

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

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

You will have to write your own parsing for all non standard formats. Also formats like "yyyymmdd" and "yyyyddmm" will be problematic, since you will need user to specify what's the input format or you will just convert in wrong in some cases.

For the rest take a look at DateTime.Parse (Also mentioned by Benjol) it should solve your problem for common formats used throughout the world.

雪若未夕 2024-08-01 15:18:14

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

不幸的是,我认为没有一个一刀切的解决方案可以解决这个问题。

DateTime.Parse cannot possibly parse all the combinations that you specify. I would suggest you first try DateTime.TryParse to see if the input date is parse-able. If that returns false, then use ParseExact (or better yet, TryParseExact) to check against each expected date format.

Unfortunately I don't think there's a one-size-fits-all solution to this problem.

甜味超标? 2024-08-01 15:18:14

您可以使用 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";
}

You can use DateTime.ParseExact

For example:

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

Edit:
Use DateTime.TryParse (or DateTime.TryParseExact) to validate the date entered.

DateTime date;
string error = "";
if (!DateTime.TryParse("12978434", out date))
{
    error = "Invalid date";
}
爱,才寂寞 2024-08-01 15:18:14

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

例如 AJAX Toolkit 日历控件

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

OP 评论后更新:

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

Is it possible for you to use a 'DatePicker' / Calendar control instead of a TextBox?

eg AJAX Toolkit Calendar control

This would remove the need for you to have to handle every possible date format a user could potentially specify. It also provides a nicer user experience IMHO.

Update after OP comment:

As other posters have suggested, I would use DateTime.TryParse as a first pass, to handle date strings in any of the supported standard formats. Then you would need to fallback on DateTime.ParseExact for each supported non-standard format. Finally I guess you need to flag an error for any non-date strings or unspported date formats.

回眸一遍 2024-08-01 15:18:14

感谢大家给予的支持和指导。
我已经找到了查询的解决方案

显式创建了一个新文本框,并使用 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

Thanks for all the support and guidance which you ppl gave.
I have found out the solution to my query

A new textbox is created explicitly and using ParseExact function the DateTime value is made to convert.

Below is the form which was used.alt text http://img146.imageshack.us/img146/2107/form.jpg

The Code is written below


    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();
         }

    }

This code will give output for all date types:

dd.mm.yyyy or dd-mm-yyyy or dd\mm\yyyy

mm.dd.yyyy or mm-dd-yyyy or mm\dd\yyyy

yyyy.mm.dd or yyyy-mm-dd or yyyy\mm\dd

yyyy.dd.mm or yyyy-dd-mm or yyyy-mm-dd

ddmmyy or mmddyy or yyddmm

dd\mm or mm\dd or dd.mm or mm.dd

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文