【问题标题】:Book appointment type DateTime datatype with no seconds?没有秒的预约类型 DateTime 数据类型?
【发布时间】:2019-03-20 06:49:57
【问题描述】:

我是这个 DateTime 的新手。

我正在尝试创建一个应用程序,您可以在其中进行预约,因此当您预约“4 月 20 日星期一上午 8 点”时,它需要这样的内容。 我正在使用 SQL Server,我需要知道如何构建我的表以及如何在代码中执行它。

假设我有一个 BookingTable,其中 AppointmentTime 为 DateTime。我是否可以将“4 月 20 日星期一 8:00 AM”类型的格式保存到该数据字段中,还是必须将其划分并在代码或其他方式中进行一些转换?我还想看一个 C# 代码的小演示。

我真的尽力解释我的问题是什么,如果它含糊不清或令人困惑,我很抱歉。

【问题讨论】:

  • "4 月 20 日星期一上午 8:00" - 不是 DateTime,它是 DateTime 的字符串表示形式。在INSERT 语句中使用此字符串表示的能力取决于很多事情,而了解它的最简单方法是简单地检查它。如果您想使用原始 INSERT 查询(appointmentTime.ToString("s")$"{appointmentTime:s}"),最好选择另一种字符串表示形式。
  • 如果您不想考虑此类事情 - 只需使用一些 ORM frameworkEntityFramework 即可。
  • 我不建议手动生成 SQL 查询。添加用户输入时始终使用参数以防止 SQL 注入攻击!

标签: c# sql-server database datetime datetime-format


【解决方案1】:

SQL Server 没有没有秒的 DateTime 类型,因此它们将始终存储在数据库中。 .NET 框架也没有。通常,您只需在存储时将 DateTime 的秒数设置为 0 并忽略输出中的秒数,即可实现此目的。

DateTime appointmentDate = DateTime.UtcNow;
DateTime appointmentDateToStore = new DateTime(
    appointmentDate.Year,
    appointmentDate.Month,
    appointmentDate.Day,
    appointmentDate.Hour,
    appointmentDate.Minute,
    0);

如何将其存储到数据库中,取决于您选择的数据访问层。

【讨论】:

  • 谢谢,我现在明白了。 :)
  • 另外,你会在不同的时区工作吗?如果是这样,我敦促您始终使用 UTC 时间。如果没有,它可能仍然是一个好主意:-)
猜你喜欢
  • 2021-05-26
  • 2011-04-07
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2014-12-15
  • 2013-04-24
  • 1970-01-01
相关资源
最近更新 更多