将noda time的LocalDate和Datetime之间进行转换的最佳方式是什么?

6

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

请问有没有简单的方法来在本地日期和nodatime日期字段之间进行转换?

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

LocalDate endDate = new LocalDate(startDate.Year, startDate.Month, startDate.Day);
2个回答

25

最简单的方法是将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();

1
我该如何从LocalDateTime中获取时间组件?我已经创建了一个LocalDateTime,如var dateTime = new LocalDateTime(2017, 8, 01, 22, 30, 00);。如果我按照你的方法去做,我只能得到日期而无法得到时间。 - Karthik
2
使用TimeOfDay属性来获取LocalTime - Jon Skeet

9
NodaTime API的开发者并没有提供从DateTimeLocalDate的转换方法。但是,您可以自己创建扩展方法,并将其用作简写在任何地方使用:
public static class MyExtensions
{
    public static LocalDate ToLocalDate(this DateTime dateTime)
    {
        return new LocalDate(dateTime.Year, dateTime.Month, dateTime.Day);
    }
}

使用方法:

LocalDate localDate = startDate.ToLocalDate();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接