查找年/月/日/小时的开始和结束

时间:2010-03-22 17:05:46

标签: java datetime jodatime

我正在使用以下剪辑来查找Joda中几个时间段的开始和结束。我左肩上的小恶魔说这是要走的路......但我不相信他。

任何有一些joda经验的人都可以看一看并告诉我这个小家伙是对的吗?

(它仅用于UTC日期时间对象)

谢谢!

/* Year */
private static DateTime endOfYear(DateTime dateTime) {
    return endOfDay(dateTime).withMonthOfYear(12).withDayOfMonth(31);
}

private static DateTime beginningOfYear(DateTime dateTime) {
    return beginningOfMonth(dateTime).withMonthOfYear(1);
}

/* Month */
private static DateTime endOfMonth(DateTime dateTime) {
    return endOfDay(dateTime).withDayOfMonth(dateTime.dayOfMonth().getMaximumValue());
}

private static DateTime beginningOfMonth(DateTime dateTime) {
    return beginningOfday(dateTime).withDayOfMonth(1);
}

/* Day */
private static DateTime endOfDay(DateTime dateTime) {
    return endOfHour(dateTime).withHourOfDay(23);
}

private static DateTime beginningOfday(DateTime dateTime) {
    return beginningOfHour(dateTime).withHourOfDay(0);
}

/* Hour */
private static DateTime beginningOfHour(DateTime dateTime) {
    return dateTime.withMillisOfSecond(0).withSecondOfMinute(0).withMinuteOfHour(0);
}

private static DateTime endOfHour(DateTime dateTime) {
    return dateTime.withMillisOfSecond(999).withSecondOfMinute(59).withMinuteOfHour(59);
}

2 个答案:

答案 0 :(得分:1)

Joda确实提供了DateMidnight和LocalDate,这可能会减轻你在真正关心日间边界的情况下如此多地处理小时和分钟的问题。 LocalDate还实现了ReadablePartial接口,看看制作反映感兴趣字段的其他实现可能是值得的。

答案 1 :(得分:0)

我知道java库是基于0的(即1月是0,12月是11)。我不认为Joda是,但如果你不确定那么仔细检查。