我试图使用Joda库,因为使用Java本机方法计算期间是一个痛苦的问题,我的所有尝试都给出了不切实际的结果
我见过这个样本
int n = Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays();
因为我所有的班级都管理着GregorianCalendar,所以我需要那个计算天数支持GregorianCalendar的方法,比如
public int countDays(GregorianCalendar start, GregorianCalendar end){
//convert to joda start and end
...
return Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays();
}
所以我的问题:
如何将GregorianCalendar
对象转换并重新转换为Joda管理的对象而没有副作用?
答案 0 :(得分:4)
使用带有DateTime
的{{1}}构造函数,可以“include ReadableInstant, String, Calendar and Date.”它也特别提及Object
。
GregorianCalendar
答案 1 :(得分:1)
您需要在创建joda之前从GragorianCalander
获取时区LocalDate
这些方面的东西:
public int countDays(GregorianCalendar start, GregorianCalendar end){
TimeZone timeZone = start.getTimeZone();
DateTimeZone jodaTimeZone = DateTimeZone.forID(timeZone.getID());
DateTime dateTime = new DateTime(start.getTimeInMillis(), jodaTimeZone);
LocalDate startDate = dateTime.toLocalDate();
timeZone = end.getTimeZone();
jodaTimeZone = DateTimeZone.forID(timeZone.getID());
dateTime = new DateTime(end.getTimeInMillis(), jodaTimeZone);
LocalDate endDate = dateTime.toLocalDate();
return Days.daysBetween(startDate, endDate).getDays();
}