使用Noda Time,如何使用LocalDate和LocalTime创建LocalDateTime

时间:2013-02-06 08:16:13

标签: c# .net datetime nodatime

我有一个LocalDate和一个LocalTime,并希望简单地从它们创建一个LocalDateTime结构。 我想到了以下扩展方法,我认为这是最快的但是由于一个不明原因,当前版本的API中不存在字段localTime.TickOfMillisecond。所以它不起作用。

    public static LocalDateTime At(this LocalDate localDate, LocalTime localTime) {
        return new LocalDateTime(localDate.Year, localDate.Month, localDate.Day, localTime.Hour, localTime.Minute, localTime.Second, localTime.Millisecond, localTime.TickOfMillisecond);
    }

所以,我在平均时间内停留使用:

    public static LocalDateTime At(this LocalDate localDate, LocalTime localTime) {
        return localDate.AtMidnight().PlusTicks(localTime.TickOfDay);
    }

感谢任何建议。

3 个答案:

答案 0 :(得分:11)

这比你现在获得它的方式容易得多 - 只需使用+ operator

LocalDate date = ...;
LocalTime time = ...;
LocalDateTime dateTime = date + time;

答案 1 :(得分:2)

有一种方法可以将LocalDate和LocalTime结合起来形成LocalDateTime

LocalDate date = ...;
LocalTime time = ...;
LocalDateTime dateTime=date.atTime(time);

答案 2 :(得分:1)

好吧,我不确定为什么它不在API中。也许Jon Skeet可以回答这个问题。

我在第二个例子中看到你的方式没有任何问题,但你可以像这样计算tickOfMillisecond

public static LocalDateTime At(this LocalDate localDate, LocalTime localTime)
{
    var tickOfMillisecond = localTime.TickOfSecond - localTime.Millisecond * 10000;
    return new LocalDateTime(localDate.Year, localDate.Month, localDate.Day, localTime.Hour, localTime.Minute, localTime.Second, localTime.Millisecond, tickOfMillisecond);
}

就我个人而言,我认为LocalDateTime应该有一个构造函数,所以你可以这样做:

var ldt = new LocalDateTime(localDate, localTime);

另一件事 - 也许您的扩展方法应该验证日期和时间都在同一个日历系统中,然后将其传递给结果?我从来没有使用任何日历,但ISO,所以我不确定。