Joda-Time将天数转换为数月和数天

时间:2014-05-30 23:58:11

标签: java date jodatime

如何使用Joda-Time将天数转换为月数和天数。例如,当我有33天时,它应显示1个月和2天。

public static void main(String[]args) 
   {        
        Calendar calendar = new GregorianCalendar();

         int years = calendar.get(Calendar.YEAR);
         int month = (calendar.get(Calendar.MONTH))+1;
         int day = calendar.get(Calendar.DATE);

         DateTime startDate = new DateTime(years, month, day, 0, 0, 0, 0);
         DateTime endDate = new DateTime(2014, 7, 3, 0, 0, 0, 0);

         Days d = Days.daysBetween(startDate, endDate);

         int days = d.getDays();
         int t = 1000 * 60 * 60 *24;
         int days = days/t;
         System.out.println(days);
}

2 个答案:

答案 0 :(得分:6)

您可以使用课程org.joda.time.Period
例如:

  Period p = new Period(startDate, endDate, PeriodType.yearMonthDayTime());
  System.out.println(p.getMonths()); 
  System.out.println(p.getDays()); 

答案 1 :(得分:0)

尝试创建一个小数部分数来表示月份对我来说毫无意义,因为几个月有不同的天数(28,29,30,31)。

ISO 8601

明智的ISO 8601标准定义了一种文本方式来表示以月和日为单位的时间跨度,称为DurationsJoda-Time为此目的有一个名为Period的类。请原谅不匹配,因为还没有日期时间术语的标准定义。

有关使用Period类的示例,请参阅此问题的this other answer by Ilya

ISO持续时间

文字格式为PnYnMnDTnHnMnS,其中P表示"期间"并且T将日期部分与时间部分分开。其他部分是可选的。一个月零两天将是P1M2D。 Joda-Time Period类既解析又生成这样的字符串。