9

我有一个 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);
    }

任何建议表示赞赏。

4

3 回答 3

12

它比您目前获得它的方式要容易得多 - 只需使用+操作符

LocalDate date = ...;
LocalTime time = ...;
LocalDateTime dateTime = date + time;
于 2013-02-11T16:49:09.223 回答
4

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

LocalDate date = ...;
LocalTime time = ...;
LocalDateTime dateTime=date.atTime(time);
于 2016-02-18T07:32:42.573 回答
2

好吧,我不确定为什么它不在 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,我从未使用过任何日历,所以我不确定。

于 2013-02-08T01:49:11.847 回答