将年份字符串(即"2005")转换为日期时间值



我正在创建一个简单的输入表单来创建一个帐户。在表单上有一个公司成立年份的输入字段,这是一个简单的文本框,用户将在其中键入年份,即2005。

然而,当尝试将此字段插入数据库字段时,尽管将文本框条目转换为日期时间,仍会抛出错误…

myCompanyAccount.Founded = Convert.ToDateTime(this.TxtCompanyFounded.Text);

是否有一种方式,我可以转换一年的输入,即2005年到一个日期时间,所以它可以插入到数据库…?提前感谢!

发生这种情况只是因为2005不是标准日期和时间格式,这就是Convert.ToDateTime失败的原因。

您可以使用DateTime.TryParseExactDateTime.ParseExact方法来解析您的自定义日期和时间,如;

string s = "2005";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
     Console.WriteLine(dt);
}

dt将是01/01/2005 00:00:00(当然它的表示取决于你在.ToString()方法中的当前文化)

这里a demonstration

您应该创建一个新的DateTime,如果您不需要它们,只需输入默认的天数/月份,例如:

MyCompany.Founded = new DateTime(Convert.ToInt32(this.TxtCompanyFounded.Text), 1, 1);

use

myCompanyAccount.Founded = new DateTime(int.parse(TxtCompanyFounded.Text), 1, 1)

这将插入日期1 January + year

不能将字符串或整型转换为datetime.所以你必须将其格式化为日期。试试这个…

 int year=convert.toint32(TxtCompanyFounded.Text);
 DateTime Date= new DateTime(year, 1, 1);

如果用户只能输入年份,则简单考虑:

var date = Convert.ToDateTime(str + "-01-01");

这不是"最干净的",但它会做的技巧(FSVO) -然而,也许数据库列应该只是一个YEAR而不是DATETIME?

在插入查询中执行如下操作,

Insert into table (starteddate) values (Convert.ToDateTime('"+TextBox1.Text+"'))

您可以使用DateTime.TryParseExact,它提供了您想要接受的所有格式的列表。

例如:

string[] validFormats = new[] {
    "yyyy",
    "MM/yyyy",
    "MM/dd/yyyy"
};
DateTime result;
var success = DateTime.TryParseExact("2005", validFormats, 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out result);

您使用:

myCompanyAccount.Founded =
    DateTime.ParseExact(this.TxtCompanyFounded.Text, "yyyy", null);

或更安全:

DateTime result;
bool canParse = DateTime.TryParseExact(this.TxtCompanyFounded.Text,
    "yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out result);
if (canParse)
{
    myCompanyAccount.Founded = result;
}
else
{
    // take care of problematic input
}

相关内容

  • 没有找到相关文章

最新更新