我有一种情况需要将文本数据转换为日期。
我使用了以下代码来执行此操作!
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#
的新手答案 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