如何在Joda中使用JDK GregorianCalendar对象日期

时间:2014-10-07 22:01:02

标签: java jodatime gregorian-calendar

我试图使用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管理的对象而没有副作用?

2 个答案:

答案 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();
}