2010-03-22 63 views
1

我使用以下截图查找Joda中几个时间段的开始和结束。我左肩上的小恶魔说这是要走的路......但我不相信他。查找开始和结束的年/月/日/小时

有没有人有一些joda的经验做一个简要的检查,并告诉我,这个小家伙是正确的?

(将仅用于UTC datetime对象)

谢谢!

/* 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

你有没有试过编写jUnit测试? – 2010-03-22 17:27:24

+0

我正在寻找比这更简单的方式,它对我来说看起来有点尴尬。但它的作品,即使在一些角落的情况下。 – reto 2010-03-22 17:42:18

+1

我认为你需要扭转endOfYear的操作。它看起来像2/2/10会给你一个12/28/10的日期。从XP/TDD的角度来看,你是否需要所有这些开始/结束方法?如果您只需要一年和一年的开始和结束时间,那就实现这一点。如果您以后发现需要日日时间,可以添加它们。最有可能的是,你不会全部需要它们。而较少的代码意味着缺少隐藏的地方。 – 2010-03-22 18:12:10

回答

1

乔达确实能够提供DateMidnight和LOCALDATE的可能缓解不必处理小时和分钟你在哪里真的只在乎时间界限的情况下,这么多。 LocalDate还实现了ReadablePartial接口,可能需要考虑反映感兴趣的领域的其他实现。

+0

不赞成与午夜有关的类和方法在乔达时间。替换为['withTimeAtStartOfDay'](http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay--)方法。 – 2016-10-19 01:38:45

0

我知道java库是基于0(即1月是0,12月是11)。我不认为乔达是,但如果你不确定双重检查。

+0

不,Joda-Time(和java.time)在1月至12月使用1-12的健全序数。 – 2016-10-19 01:37:25

相关问题