将文本数据转换为日期
我有一种情况需要将文本数据转换为日期。
我使用了以下代码来做到这一点!
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
恐怕解析日期比这更复杂一些。 这取决于您的文化/国家/地区设置。 查看 DateTime.Parse 的重载。另
请注意,当您输出日期时,您还可以/应该使用 String.Format,像这样:
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:
首先,如果您使用带有格式字符串的
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 theDateTime.Parse(string, IFormatProvider)
variant and define your own IFormatProvider for this. You might find this MSDN article might be useful for this.您必须为所有非标准格式编写自己的解析。 此外,像“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.
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.
您可以使用 DateTime.ParseExact
例如:
编辑:
使用 DateTime.TryParse (或 DateTime.TryParseExact) 来验证输入的日期。
You can use DateTime.ParseExact
For example:
Edit:
Use DateTime.TryParse (or DateTime.TryParseExact) to validate the date entered.
您是否可以使用“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.
感谢大家给予的支持和指导。
我已经找到了查询的解决方案
显式创建了一个新文本框,并使用 ParseExact 函数对 DateTime 值进行转换。
以下是使用的表格。alt text http://img146.imageshack.us/ img146/2107/form.jpg
代码写在下面
此代码将为所有日期类型提供输出:
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
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