我刚刚审核了一些代码,在此过程中,我发现了一个我在修复过程中遇到的问题。其中一个问题涉及我们的数据背景上的全面日期转换例程。
无论如何,在调查期间我遇到了一些像这样的代码:
case DateTimeKind.Unspecified:
return DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
通过其他一些代码,我发现其他人这样做了:
if (value.Kind == DateTimeKind.Unspecified) {
return new DateTime(value.Ticks, DateTimeKind.Utc);
}
我无法感觉第一个是最好的"。我知道他们基本上都做同样的事情 - 生成一个新的DateTime
对象。但是第一个似乎在原始意图方面更具可读性 - 采取这个日期,给我相同的一个但是指定了Utc。
感觉更直接可读。我知道这可能是基于意见的事情,但可读性非常重要。
答案 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
实际上可能是合适的。