执行DateTime种类

时间:2013-11-15 13:03:52

标签: c# .net datetime

我们正在编写一个可供其他团队访问的dll。 我们的一个要求是每个传递的DateTime都有一个DateTimeKind.Utc。

但是,我们没有强制执行导致错误的此要求。所以我们想知道我们如何强制执行

我们有一些想法:

  • 编写一个方面来检查传递给方法的每个参数。 Kind!= UTC时抛出异常。当您传递包含DateTime的对象时,这可以工作但不起作用。

  • 使用自定义对象UtcDateTime更改所有DateTimes。

这可能有效,但需要确保我们将每个DateTime和所有调用替换为我们的日期时间。看起来像这样:

public class UtcDateTime
{
  private DateTime _dateTime;
  public UtcDateTime(DateTime dateTime)
  {
    if(dateTime.Kind != DateTimeKind.Utc)
    {
        throw new ArgumentException();
    }
    _dateTime = dateTime;
  }
}

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

  

使用自定义对象UtcDateTime更改所有DateTimes。

如果你想这样做并用其他内容替换DateTime,你也可以使用DateTimeOffset,其中包括时区信息。

答案 1 :(得分:1)

您可以使用代码合同来强制执行此操作。

在这里阅读它们。

http://msdn.microsoft.com/en-us/library/dd264808(v=vs.110).aspx

例如,您可以使用

Contract.Requires(yourDateTime.Kind == DateTime.Utc);

或者,您可以在方法中强制执行转换。如果是DateTimeKind.Unspecified,请抛出。

void Foo(ObjectWithDateTime foo)
{
    if (foo.Date.Kind == DateTimeKind.Unspecified) {
        throw ....
    }
    // convert here.
}