c# - T-SQL 有一个`time` 数据类型——C# 是否只有`time`,而不是`datetime` 数据类型?
问题描述
我正在学习并且仍然习惯于 asp.net-mvc、C# 和 SQL 的“T”版本。
我有一个数据库,我在其中创建了一个 field DueDate
, data type Date
... 和另一个 field DueTime
, data typeTime
在.sql
文件中创建表并使用一些示例条目作为种子。
但是在我的model.cs
,在 C# 中,似乎只有DateTime
C# 中的数据类型?
但是使用该数据类型使得在视图中,您必须为该字段输入日期和DueTime
时间,这既不是我想要的,也不是用户方便或可口的。
我搜索了文档,并在谷歌上搜索了示例,但我似乎找不到任何与我正在做的事情足够相似的示例,我可以推断出一些东西。
这是.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
现场时间?我使用什么数据类型?
解决方案
.Net 框架没有内置Time
类型,也没有内置Date
类型。
它确实有TimeSpan
,但这与Time
- C#TimeSpan
实际上是一个持续时间 - 两个时间点之间的时间量 - 而 SQL Server 的Time
数据类型实际上是一天中的时间 - 并且也记录如下:
定义一天中的某个时间。时间没有时区感知,基于 24 小时制。
它的范围是00:00:00.0000000
通过23:59:59.9999999
。
然而, .Net 的TimeSpan
结构被记录为
表示时间间隔。
它的范围从它MinValue
到有MaxValue
字段,它们是
-10675199.02:48:05.4775808
通过10675199.02:48:05.4775807
.
说了这么多,由于 .Net 框架没有TimeOfDay
数据类型,它使用 aTimeSpan
来映射到 SQL Server 的Time
数据类型,您可以随意使用该数据类型来表示一天中的时间(这也是DateTime
'的类型s structTime
属性,这意味着 .Net 框架本身使用这种类型来表示一天中的时间。
如果您想要 .Net 的替代日期时间 API,您应该查看NodaTime
.
推荐阅读
- serverless-framework - '无服务器调用 -f hello' 给出 KeyError
- php - $script_filename 导致 nginx 配置错误
- php - 如何在 laravel 中从 PDF 上传生成缩略图
- reactjs - 反应原生地图
- c - 面试问题 - 如何在不丢失数据的情况下连续读取缓冲区
- vue.js - 从输入字段 VeeValidate 中删除图标
- python - Path().stat().st_time 时区?
- sql - 在 sqlite 中按相同的输入排序
- mysql - MySQL中的表创建导致模糊错误
- r - 如何在多列中保持最小值并使所有其他行值在 R 中为 0