NodaTime的时代

时间:2016-09-06 03:03:05

标签: c# nodatime

我注意到与日期相关的类型 - LocalDate LocalDateTime OffsetDateTime ZonedDateTime - - 只有 LocalDate 接受时代作为构造参数:

public LocalDate(int year, int month, int day);
public LocalDate(Era era, int yearOfEra, int month, int day, [NotNullAttribute] CalendarSystem calendar);

基于时代的构造函数是否仅为方便起见而提供?如果是这样,为什么不扩展到将构造函数限制为非时代值的其他类型?例如:

public LocalDateTime(int year, int month, int day, int hour, int minute);

所有类型都有一个不可变的 Era 参数。据我所知,影响其他类型 Era 的唯一方法是使用构建过程中使用的日历。

有人能够解释这个设计选择吗?

1 个答案:

答案 0 :(得分:3)

基本上是疏忽和避免大量超载的混合物。在LocalDateTime中使用这样的构造函数肯定会产生逻辑 sense

ZonedDateTimeOffsetDateTime没有构造函数接受单独的组件 - 您需要从其他类型之一创建它们。所以只需要添加任何内容LocalDateTime

但是,有一个问题是要添加哪些重载。 LocalDateTime中已经有8个构造函数 - 四个精度变量(低至分钟,秒,毫秒,以及毫秒内的刻度)和每个接受CalendarSystem或假设ISO的两个重载。我不想将这个构造函数的数量加倍到16(并且已经奇怪的是,在2.0中你不能用构造函数直接构造一个纳秒精度的值......)

使用时代是非常不寻常的,因此,不是每个人都要付出很多构造函数来处理的复杂性成本,而是单独构建LocalDateLocalTime更简单: / p>

var ldt = new LocalDate(Era.Xyz, yearOfEra, month, day, calendar) +
          new LocalTime(....);

这很简单而且效率很高,没有过载爆炸的麻烦。