DateTime - 指定哪种形式最有意义的种类

时间:2014-06-10 07:33:10

标签: c# datetime

我刚刚审核了一些代码,在此过程中,我发现了一个我在修复过程中遇到的问题。其中一个问题涉及我们的数据背景上的全面日期转换例程。

无论如何,在调查期间我遇到了一些像这样的代码:

    case DateTimeKind.Unspecified:
        return DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);

通过其他一些代码,我发现其他人这样做了:

if (value.Kind == DateTimeKind.Unspecified) {
    return new DateTime(value.Ticks, DateTimeKind.Utc);
}

我无法感觉第一个是最好的"。我知道他们基本上都做同样的事情 - 生成一个新的DateTime对象。但是第一个似乎在原始意图方面更具可读性 - 采取这个日期,给我相同的一个但是指定了Utc。

感觉更直接可读。我知道这可能是基于意见的事情,但可读性非常重要。

2 个答案:

答案 0 :(得分:1)

我认为没有一个客观的答案。我会采取第一种方法 - 看起来更清洁。但是,我也可以说使用构造函数是人们更习惯的东西。不是每个人都知道SpecifyKind存在。

我还必须说这两种方法都不是那么糟糕。任何具有至少几个月经验的开发人员都会理解这两种方法。

答案 1 :(得分:0)

他们是完全相同的。如果你看the implementation of DateTime.SpecifyKind,你会发现:

public static DateTime SpecifyKind(DateTime value, DateTimeKind kind) {
    return new DateTime(value.InternalTicks, kind);
}

.Ticks解析为.InternalTicks

就可读性而言,我会选择SpecifyKind。 Ticks更多的是内部实现细节。你真的不应该对他们做很多事情来精通DateTime

请注意使用此代码的 where 。如果所有日期都是UTC,那么你没事。但是,如果您要在其他时区之间进行转换,Unspecified实际上可能是合适的。

相关问题