【问题标题】:Is there a way to indicate the DateTime object only has Date value?有没有办法表明 DateTime 对象只有 Date 值?
【发布时间】:2011-03-01 03:10:30
【问题描述】:

在数据库中,有些字段是TimeStamp,有些是Date,这意味着有些接受Date和Time,有些只接受Date。

我正在尝试编写一个帮助类,它可以通过遍历数据对象的属性来生成 SQL,并通过属性的数据类型生成适当的 SQL。

也就是说,表“SomeDateTimeTable”具有时间戳字段“A_TimeStamp”和日期字段“A_Date” 然后我的数据对象有两个属性,“public DateTime A_TimeStamp”和“public DateTime A_Date”。

但是因为C#只有DateTime...我的程序无法区分是DateTime属性表明数据库字段是TimeStamp还是Date....

不知道有没有办法实现呢?

我只能想到...要么创建另一个具有 DateTime 参数的类以指示这是 Date 类型...要么检查时间是否为 00:00:00...

但是这两种方式似乎......不太聪明?

【问题讨论】:

  • (假设您使用的是 SQL Server)请务必区分时间戳、日期时间和日期。 AFAIK,时间戳数据类型是不透明的:它是由服务器生成的,并不意味着被读取为日期数据。

标签: c#


【解决方案1】:

在我看来,这更多地与 schema 相关,而不是特定值;即往往是所有日期与日期时间,通常不是列中的单个单元格。

根据这个工作假设(可能不适合您的场景),我可能会使用元数据,例如(但不限于):

[DateOnly]
public DateTime Foo {get;set;}

...

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property,
    AllowMultiple=false,Inherited=true)]
public class DateOnlyAttribute : Attribute {}

然后你可以使用Attribute.IsDefined(member, typeof(DateOnlyAttribute)) 来查看是否为每个成员设置。

【讨论】:

  • 谢谢,太好了,这就是我想做的。我现在学到了一些东西,再次感谢!
【解决方案2】:

您可以创建自己的类型(应该是不可变的)或使用属性。

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 2012-09-24
    • 2017-02-03
    • 2011-02-03
    • 2021-07-25
    • 1970-01-01
    • 2011-01-24
    • 2016-11-20
    • 2023-02-15
    相关资源
    最近更新 更多