如何在c#中将datetime转换为smalldatetime?我正在将日期和ı需要将其转换为与数据库一致。禁止在sql中更改列的数据类型。在c中将DateTime转换为SmallDateTime#
回答
您可以对实体框架模型使用.NET DateTime类型,但告诉EF它在数据库中使用非默认列类型。您可以通过重写你的DbContext的OnModelCreating方法,以及使用HasColumnType方法做到这一点:
public class Foo
{
public int Id { get; set; }
public DateTime IAmSoSmall { get; set; } // wants to be smalldatetime in SQL
}
public class MyContext : DbContext
{
public DbSet<Foo> Foos { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var foo = modelBuilder.Entity<Foo>();
foo.Property(f => f.IAmSoSmall).HasColumnType("smalldatetime");
base.OnModelCreating(modelBuilder);
}
}
当然,你必须做你的DateTime属性合适的范围检查,以确保存储值落在SQL smalldatetime支持的值之间。我想你可以做到这一点与属性的属性,如:
[Range(typeof(DateTime), "1/1/1900", "6/6/2079")]
public DateTime IAmSoSmall { get; set; } // wants to be smalldatetime in SQL
...基于自1900年1月1日,到2079年6月6的有效范围,在MSDN上的记录。
您也可以使用数据注释'[Column(TypeName =“smalldatetime”)]'更改列类型。见http://stackoverflow.com/a/4833477/1180926 – Arithmomaniac
@Arithmomaniac是的,它看起来像EF 4.3.1列类型数据注释的作品。尼斯。 –
也许你可以这样做YourDateTime.Date
通常情况下,当你这样做的方式,它会设置时间为00:00:00。
'smalldatetime' *可以*表示一个时间组件。请参阅[文档](http://msdn.microsoft.com/en-us/library/ms182418.aspx) –
Sql Server的datetime
和smalldatetime
都是自动映射到从CLR的System.DateTime
。 A smalldatetime
具有1分钟的精确度;一个datetime
的精度约为1/300秒(不要问为什么,它只是)。由于CLR的System.DateTime1
具有100纳秒的精度,因此运行时会考虑舍入。
smalldatetime
内部是一个32位的整数,包含自smalldatetime
历元(1900-01-01 00:00)分钟的计数。在转换中,秒和小数秒是使用SQL Server的神秘日期/时间舍入规则舍入的,所以日期2013-01-31 23:59:59四舍五入到下一个日期2013- 02-01 00: 00:00'。
datetime
内部是一对32位整数。高阶词是自纪元以来的天数;低位字是从开始日(00:00:00)开始计数的毫秒数。datetime
的时代为1900-01-01 00:00:00.000。而且,同样神秘的方式在转换中将值舍入为四舍五入,并且将固定秒数置于SQL Server的适当毫秒桶之一中,为3ms的倍数—没有像2013年那样的SQL Server`日期时间值-05-01 13:57:23.004。这将被“舍入”为23.003ms或23.006ms。
如果你想更多地控制事情,你需要在C#中调整你的日期时间值,然后将它们发送到数据库。
Eh? SQL Server以无明显原因以0.000,0.003或0.007秒为增量计算时间。自从Sybase时代以来,它一直都是。即使如此,在Windows NT下,BIOS和WinNT系统时钟都具有分辨率c。 10毫秒。 Sybase必须使用CMOS“实时”时钟实现自己的时间实现,绕过BIOS。这个芯片在32.768 kHz这样的东西上打勾,使得二进制算术变得容易。为什么他们会将这个问题敲入不规则大小的桶中,这些桶与十进制值或二进制表示形式不匹配。我确信当时对某人有意义。 –
我完全误读了第一次,如果你是说有没有合理性datetime'的'不同的精度和'smalldatetime',不要再追上的事实,你paranthetical提到的任意1/300 S的'精度datetime'。现在大胆地删除我误导的评论。 – jball
- 1. 将varchar列转换为smalldatetime
- 2. 在sql server中将nvarchar转换为smalldatetime
- 3. 将数据类型datetime转换为smalldatetime的SQL错误?
- 4. 将datetime js转换为c#
- 5. 将Timespan转换为C中的DateTime#
- 6. 将SYSTEMTIME(Native C++)转换为DateTime(C#)
- 7. 将字符串转换为smalldatetime
- 8. DATETIME2转换为smalldatetime触发
- 9. smalldatetime转换
- 10. 将DateTime转换为DateTime?在asp.net
- 11. datetime vs smalldatetime
- 12. C#将UTC int转换为DateTime对象
- 13. 将javascript gettime()转换为c#datetime
- 14. 将字符串转换为DateTime C#ASP.NET
- 15. 将C#DateTime转换为输入到数据库中的SQL DateTime
- 16. 在tsql中将varchar转换为datetime
- 17. 在SQL Server中将varchar转换为datetime
- 18. 在SQL Server中将varchar转换为datetime
- 19. 在sql server中将datetime转换为yyyymmddhhmmss
- 20. 在T-SQL中将DateTime转换为yyyyMMddHHmm
- 21. 将DateTime + TimeZone转换为UTC
- 22. 将sting转换为datetime python
- 23. SQL - 将varchar转换为datetime
- 24. 将varchar转换为datetime
- 25. 将DateTime转换为毫秒
- 26. Typescript将sting转换为datetime
- 27. 将nvarchar转换为datetime
- 28. SQL将INT转换为datetime
- 29. 将lastlogontimestamp转换为DateTime
- 30. SQL将'DDMMYY'转换为datetime
相关:http://stackoverflow.com/questions/14124887/datetime-from-net-to-smalldatetime-in-sql-how-to-do-queries –
请告诉我们相关的代码。你说你在转换,但你的意思是在一个where子句中吗?在您的实体反序列化?还有别的吗? –
而且由于这是下变换,所以您最好从解释smalldatetime边界边缘的值中解释您想要的内容。 – DonBoitnott