【问题标题】:How to string year to datetime in sql server如何在sql server中将年份字符串转换为日期时间
【发布时间】:2011-08-17 06:05:08
【问题描述】:

我有一个没有日历控件的文本框,我们将其称为出版年份(我们在项目中使用差异名称)。出版年份为 1999 年、2001 年或 1860 年。

我的步骤是这样的

我的数据库中有日期时间。(不可更改)

我正在使用 C# 和 sql server 2005。

string date = textBox1.text;
Datetime dt = Convert.ToDateTime(date);

我使用动态 sql 将 dt 传递给我的数据库

为了欺骗代码,我在输入的日期之前添加了一个前缀 1/1/ ,例如 1/1/2010 ,效果很好

现在我的 TL 要求我不要那样做……我是 ??? .请帮忙

【问题讨论】:

  • @Lucero:可能是“团队负责人”
  • @Chris Lively,是的,也许吧。但这引出了一个问题,为什么团队负责人没有提出更好的方法。
  • @Lucero:我想这会引出为什么“Lead”会出现在他们的标题中的问题。 ;) 也许另一个 L 词是合适的。
  • 如果您根据字符串操作日期,我建议始终使用标准化的 ISO-8601 格式 (YYYYMMDD),因为它不依赖于任何区域、语言, 区域设置并且将始终有效。因此,在您的情况下,只需将您的 2010 转换为 20100101,然后您的转换将始终没有问题。

标签: c# asp.net datetime


【解决方案1】:

听起来你真的应该:

  • 将文本解析为整数
  • 创建一个新的DateTime,以该年和 1 月 1 日为日/月。

例如:

int year;
if (int.TryParse(textBox1.Text, out year))
{
    DateTime dt = new DateTime(year, 1, 1);
}
else
{
    // Handle input
}

【讨论】:

    【解决方案2】:

    请注意,如果您只关心年份,那么我强烈建议数据库字段应该是 Int 而不是 DateTime。

    最小 sql 日期时间值是 1/1/1753 有多种原因,您可以certainly look up。但是,关键是常规的 DateTime 字段存储的信息比您关心的要多。

    因此,如果您处理早于 1753 年的出版物,您将遇到架构问题。而且,如果你不这样做,你肯定会遇到问题,以确定出版物是 280 年还是 279 年或 281 年......

    【讨论】:

    • +1 - 关于 1753 年之前的出版物,最好的办法是切换到 SQL Server 2008 并使用 datetime2 ;)
    【解决方案3】:

    您可以使用包含可用年份的下拉列表吗?如果只有三个可能的出版年份,那么这作为输入控制会更有意义。获取年份并将 DateTime 月份和日期值分别填充“1”。

    【讨论】:

      猜你喜欢
      • 2019-08-31
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多