在 noda time LocalDate 和 Datetime 之间转换的最佳方法?

Best way to convert between noda time LocalDate and Datetime?

我在项目中同时使用了本机 Datetime 和 Noda Time 库 LocalDate。 LocalDate 主要用于计算,而 Datetime 用于其他地方。

谁能给我一个简单的方法来在本机日期字段和 nodatime 日期字段之间进行转换?

我目前正在使用以下方法将 Datetime 字段转换为 Noda LocalDate。

LocalDate endDate = new LocalDate(startDate.Year, startDate.Month, startDate.Day);

NodaTime API 的开发人员尚未公开从 DateTimeLocalDate 的转换。但是,您可以自己创建一个扩展方法并在任何地方使用它作为 shorthand:

public static class MyExtensions
{
    public static LocalDate ToLocalDate(this DateTime dateTime)
    {
        return new LocalDate(dateTime.Year, dateTime.Month, dateTime.Day);
    }
}

用法:

LocalDate localDate = startDate.ToLocalDate();

最简单的方法是将 DateTime 转换为 LocalDateTime 并取 Date 部分:

var date = LocalDateTime.FromDateTime(dateTime).Date;

我希望这比从 DateTime 获取年月日更有效。 (这对你是否重要是另一回事。)

在Noda Time 2.0中,DateTime有一个扩展方法,所以你可以使用:

using static NodaTime.Extensions.DateTimeExtensions;
...
var date = dateTime.ToLocalDateTime().Date;

相反的方向,我会再次通过 LocalDateTime:

var dateTime = date.AtMidnight().ToDateTimeUnspecified();