将文本数据转换为日期
我遇到需要将文本数据转换为日期的情况。将文本数据转换为日期
我已经使用下面的代码来做到这一点!
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 ------
2009/12/13或12/13/9 ----转换日期------- 12/13/2009
10/16 ----转换日期------------------- ---- 16/10/2009
2009/12/10 ----转换日期------------------ 10/12/2009
种下列格式没有得到改变为DD /月/年
一十分之十六-DD /毫米
060209或06022009 DDMMYYYY
13122009 MMDDYYYY
20091213 YYYYMMDD
20091312 yyyyddmm
20.07.2009/20.07.2009/20-07-2009/20-07-09
任何人都可以帮助我解决这个问题。 我对c很陌生#
非常感谢您的支持和指导。 我已经找到了解决方案我的查询
显式创建一个新的文本框,并使用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.毫米或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
方法,该格式字符串指定您希望日期字符串出现的格式(有关此信息,请参阅here)。
至于为什么您指定的其他格式没有正确解析为DateTime
对象,您可能需要使用DateTime.Parse(string, IFormatProvider)
变体并为此定义您自己的IFormatProvider。你可能会发现这个MSDN article可能对此有用。
您必须为所有非标准格式编写自己的解析。像“yyyymmdd”和“yyyyddmm”这样的格式也会产生问题,因为您需要用户指定输入格式,或者在某些情况下您只是将其转换为错误。
其余的看看DateTime.Parse(Benjol也提到过),它应该解决您在世界各地使用的常见格式的问题。
您可以使用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";
}
这不起作用。我想你必须指定一个合适的IFormatProvider或ICultureInfo。 – jpoh 2009-06-25 09:36:06
我在我的机器上使用了null。想想我会在这一个上做更多的调查。 – Castrohenge 2009-06-25 10:15:59
DateTime.Parse无法解析您指定的所有组合。我建议你先尝试使用DateTime.TryParse来查看输入日期是否可以解析。如果返回false,则使用ParseExact(或更好,TryParseExact)来检查每个预期的日期格式。
不幸的是,我不认为有这个问题的一个通用解决方案。
是否可以使用'DatePicker'/ Calendar控件而不是TextBox?
如AJAX Toolkit Calendar control
这将消除需要你必须处理每一个可能的日期格式的用户可能会指定。它还提供了更好的用户体验恕我直言。 OP评论后
更新:
正如其他海报建议,我会用DateTime.TryParse作为第一关,以处理任何支持标准格式的日期字符串。然后,您需要针对每种受支持的非标准格式对DateTime.ParseExact进行回退。最后,我想你需要为任何非日期字符串或不支持的日期格式标记错误。
你无法确定yyyymmdd和yyyyddmm之间的区别,或者ddmmyyyy和mmddyyyy之间的区别20010102与01022001一样不明确。 – 2009-06-25 09:28:00