我遇到DateTime数据类型的问题。通过文本框我想添加人物dateofbirth。由于C#中没有日期数据类型,我被迫使用DateTime数据类型,但在将TxtDateofBirth转换为DateTime时,我收到错误,“字符串未被识别为有效的DateTime”。这是我转换代码。我将此代码保留在add event中。
DateTime dateofbirth = Convert.ToDateTime(TxtDateOfBirth.Text);
我该怎么办?
谢谢,
Masum
答案 0 :(得分:3)
将DateTime.ParseExact与仅指定日期部分的格式字符串一起使用。
或者,因为这是用户输入,请使用DateTime.TryParseExact
,这样如果用户输入了错误的日期,则无需捕获异常:
using System;
class Test
{
static void Main()
{
TestParsing("24/10/2009");
TestParsing("flibble");
}
static void TestParsing(string text)
{
DateTime dt;
if (DateTime.TryParseExact(text, "d", null, 0, out dt))
{
Console.WriteLine("Parsed to {0}", dt);
}
else
{
Console.WriteLine("Bad date");
}
}
}
请注意,格式字符串“d”表示“短日期格式”(请参阅MSDN中的"standard date and time form at strings"和"custom date and time format strings"页面)。 “null”的意思是“使用当前的文化” - 所以上述内容适用于英国,但您需要在美国制作字符串“10/24/2009”。如果您不想使用线程的当前默认值,则可以指定特定区域性。 0表示默认的日期和时间样式。查看MSDN页面以获取更多信息。
答案 1 :(得分:1)
或者,use a mask以便用户只能输入有效日期。 (参见给出链接示例下的c#部分)
答案 2 :(得分:1)
几乎没有任何东西可以添加到Jon的答案中,但在这种情况下,我想说明一点:
尝试了解您的问题不是因为DateTime数据类型,而是因为您的日期字符串与DateTime构造函数的预期格式(基于区域设置/线程文化)不匹配。
您说您被“强制”使用DateTime数据类型。你应该记住,日期应该始终被视为日期。我见过太多开发人员陷入使用日期作为字符串(并执行分割/搜索操作)而不是使用DateTime的陷阱,因为他们觉得后者太复杂了。