【问题标题】:T-SQL has a `time` data type -- does C# have just `time`, instead of `datetime` data type? [duplicate]T-SQL 有一个`time` 数据类型——C# 是否只有`time`,而不是`datetime` 数据类型? [复制]
【发布时间】:2020-02-28 11:01:16
【问题描述】:

我正在学习并且仍然习惯于 asp.net-mvc、C# 和“T”版本的 SQL。

我有一个数据库,我在其中创建了一个字段 DueDate,数据类型 Date... 和另一个字段 DueTime,数据类型 Time.sql 文件中创建表并使用一些示例条目。

但在我的model.cs,在C#中,C#中似乎只有DateTime数据类型?

但是使用该数据类型使得在视图中,您必须为DueTime 字段输入日期时间,这既不是我想要的,也不方便或适合用户。

我搜索了文档,并在 Google 上搜索了示例,但我似乎找不到任何与我正在做的事情足够相似的示例,我可以推断出一些东西。

这是用于创建表和播种表的 .sql 文件:

CREATE TABLE [dbo].[Homeworks]      /* use plural db name */
(
    [ID] INT IDENTITY (1,1) NOT NULL,
    [Priority]  NVARCHAR(18)        NOT NULL,
    [DueDate]   DATE        NOT NULL,
    [DueTime]   TIME(0)     NOT NULL,
    [Dept]      NVARCHAR(4) NOT NULL,
    [Course]    NVARCHAR(9) NOT NULL,
    [Assignment]    NVARCHAR(64)    NOT NULL,
    [Notes]     NTEXT       NOT NULL,

    CONSTRAINT [PK_dbo.Homeworks] PRIMARY KEY CLUSTERED ([ID] ASC)
);

INSERT INTO [dbo].[Homeworks] (Priority, DueDate, DueTime, Dept, Course, Assignment, Notes) VALUES
    ('super-important','2019-11-11','11:59:00', 'CS', '123', 'Questions/Answers', 'best to read ch 5 first'),
    ('meh','2019-11-18','11:59:00','CS','234','write helloWorld program','find out how to write a helloWorld program'),
    ('important','2019-11-13','11:59:00','MTH','123','chapter 3 problems','do the odd-numbered ones'),
    ('regular','2019-11-15','11:59:00','WR','101','write essay paper','figure out something to write an essay about'),
    ('notes','2019-11-14','11:59:00','CS','189','do up notes over chapters 1-5','make sure you know that crap for the mid-term')

GO

这里是模型类的相关部分:

        [Required]
        [DisplayName("Due Date")]
        public DateTime DueDate { get; set; }

        //------------------------------------------------------------
        [DisplayName("Due Time"), Required]
        public DateTime DueTime { get; set; }

一切正常,就像您在localhost 上运行页面时一样,只要您在time 字段中输入完整日期即可。但是输入应该会进入数据库。

如何让表单在time 字段中简单地接受时间?我使用什么数据类型?

【问题讨论】:

  • @aage 实际上this 更接近——但是,我仍然尝试按照该示例进行操作,并且到处都出现错误.....我只是不确定如何将它们组合在一起- - 一定有办法!
  • 也许像this 这样的东西会起作用?本质上要求模型以时间格式提交

标签: c# .net tsql asp.net-mvc-5


【解决方案1】:

.Net 框架没有内置的Time 类型,也没有内置的Date 类型。
它确实有TimeSpan,但这与Time 不同 - c# TimeSpan 实际上是一个持续时间 - 两个时间点之间的时间量 - 而 SQL Server 的 Time 数据类型实际上是时间当天 - 也是documented

定义一天中的某个时间。时间没有时区感知,基于 24 小时制。

它的范围是00:00:00.000000023:59:59.9999999

然而,.Net 的 TimeSpan 结构被记录为

表示时间间隔。

它的范围从 MinValueMaxValue 字段,它们是

-10675199.02:48:05.477580810675199.02:48:05.4775807

说了这么多,由于.Net框架没有TimeOfDay数据类型,它使用TimeSpan映射到SQL Server的Time数据类型,你可以随意使用该数据类型来表示一天中的时间(这也是DateTime 的结构Time 属性的类型,这意味着.Net 框架本身使用这种类型来表示一天中的时间。

如果您想要 .Net 的替代日期时间 API,您应该查看 NodaTime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多