T-SQL 有一个“时间”数据类型——C# 是否只有“时间”,而不是“日期时间”数据类型?
T-SQL has a `time` data type -- does C# have just `time`, instead of `datetime` data type?
我正在学习 asp.net-mvc 和 C#,以及 SQL 的 'T' 版本,并且还在逐渐习惯。
我有一个数据库,其中我创建了一个字段 DueDate
、数据类型 Date
... 和另一个字段 DueTime
、数据类型 Time
.sql
文件来创建 table 并使用一些示例条目作为种子。
但是在我的model.cs
中,在C#中,C#中似乎只有DateTime
数据类型?
但是使用该数据类型使得在视图中,您必须为 DueTime
字段输入日期 和 时间,这两者都不是我要,对用户来说也不方便也不好table
我搜索了文档,并在谷歌上搜索了示例,但我似乎找不到任何与我正在做的足够相似的示例,我可以推断出一些东西。
这是 .sql
文件,用于创建和播种 table:
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
这里是模型的相关部分class:
[Required]
[DisplayName("Due Date")]
public DateTime DueDate { get; set; }
//------------------------------------------------------------
[DisplayName("Due Time"), Required]
public DateTime DueTime { get; set; }
这一切都有效,就像您 运行 localhost
上的页面时的功能一样——只要您在 time
字段中输入完整日期。但是输入会按原样进入数据库。
如何让表单在 time
字段中接受简单的时间?我使用什么数据类型?
.Net 框架没有内置 Time
类型,也没有内置 Date
类型。
它确实有 TimeSpan
,但这与 Time
不同 - C# TimeSpan
实际上是一个持续时间 - 两个时间点之间的时间量 - 而 SQL服务器的 Time
数据类型实际上是一天中的时间 - 并且也是 documented 这样的:
Defines a time of a day. The time is without time zone awareness and is based on a 24-hour clock.
它的范围是 00:00:00.0000000
到 23:59:59.9999999
。
然而,.Net 的 TimeSpan
结构被记录为
Represents a time interval.
它的范围从 MinValue
到 MaxValue
个字段,即
-10675199.02:48:05.4775808
到 10675199.02:48:05.4775807
.
话虽如此,由于 .Net 框架没有 TimeOfDay
数据类型,它使用 TimeSpan
映射到 SQL 服务器的 Time
数据类型,您可以随意使用该数据类型来表示一天中的时间(这也是 DateTime
的结构 Time
属性 的类型,这意味着 .Net 框架本身使用此类型来表示一天中的时间。
如果您想要 .Net 的替代日期时间 api,您应该查看 NodaTime
。
我正在学习 asp.net-mvc 和 C#,以及 SQL 的 'T' 版本,并且还在逐渐习惯。
我有一个数据库,其中我创建了一个字段 DueDate
、数据类型 Date
... 和另一个字段 DueTime
、数据类型 Time
.sql
文件来创建 table 并使用一些示例条目作为种子。
但是在我的model.cs
中,在C#中,C#中似乎只有DateTime
数据类型?
但是使用该数据类型使得在视图中,您必须为 DueTime
字段输入日期 和 时间,这两者都不是我要,对用户来说也不方便也不好table
我搜索了文档,并在谷歌上搜索了示例,但我似乎找不到任何与我正在做的足够相似的示例,我可以推断出一些东西。
这是 .sql
文件,用于创建和播种 table:
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
这里是模型的相关部分class:
[Required]
[DisplayName("Due Date")]
public DateTime DueDate { get; set; }
//------------------------------------------------------------
[DisplayName("Due Time"), Required]
public DateTime DueTime { get; set; }
这一切都有效,就像您 运行 localhost
上的页面时的功能一样——只要您在 time
字段中输入完整日期。但是输入会按原样进入数据库。
如何让表单在 time
字段中接受简单的时间?我使用什么数据类型?
.Net 框架没有内置 Time
类型,也没有内置 Date
类型。
它确实有 TimeSpan
,但这与 Time
不同 - C# TimeSpan
实际上是一个持续时间 - 两个时间点之间的时间量 - 而 SQL服务器的 Time
数据类型实际上是一天中的时间 - 并且也是 documented 这样的:
Defines a time of a day. The time is without time zone awareness and is based on a 24-hour clock.
它的范围是 00:00:00.0000000
到 23:59:59.9999999
。
然而,.Net 的 TimeSpan
结构被记录为
Represents a time interval.
它的范围从 MinValue
到 MaxValue
个字段,即
-10675199.02:48:05.4775808
到 10675199.02:48:05.4775807
.
话虽如此,由于 .Net 框架没有 TimeOfDay
数据类型,它使用 TimeSpan
映射到 SQL 服务器的 Time
数据类型,您可以随意使用该数据类型来表示一天中的时间(这也是 DateTime
的结构 Time
属性 的类型,这意味着 .Net 框架本身使用此类型来表示一天中的时间。
如果您想要 .Net 的替代日期时间 api,您应该查看 NodaTime
。