2011-09-03 95 views
3

我需要帮助用Java编写一个函数,输入日期,并告诉我的年,月,和天数自日期。日期之间的Java时间,现在

例如, “2005年7月1日” 将输出 “6.年,1月,2天”

+1

你有没有尝试过?你在挣扎什么?你有没有用伪代码写出来? – luketorjussen

+0

您会看到许多伟大的库已经实现了这种功能,例如[joda-time](http://joda-time.sourceforge.net/)。 –

+0

基于什么?你说6年,但基准日期是多少? – Tarik

回答

7

使用Joda Time - 这使得它相对容易:

import org.joda.time.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     LocalDate then = new LocalDate(2005, 7, 1); 
     LocalDate today = new LocalDate(); 

     Period period = new Period(then, today, PeriodType.yearMonthDay()); 
     System.out.println(period); // P6Y2M2D 
     System.out.println(period.getYears()); // 6 
     System.out.println(period.getMonths()); // 2 
     System.out.println(period.getDays()); //2 
    } 
} 

(我大大更喜欢Joda API到Date/Calendar。它使用起来更容易,部分原因是因为通常更喜欢不变性。)

+0

Joda-Time支持Java版本1.4.2吗? –

+0

@Kit:您可能需要找到一个1.x的版本 - 2.0使用泛型等,所以需要Java 1.5或更高,我相信。 –

+0

为了使其更容易,放眼['PeriodFormatterBuilder'(http://www.joda.org/joda-time/apidocs/org/joda/time/format/PeriodFormatterBuilder.html)类。例如,打印年和月,像 “十五年8个月” 格式化器,可构造如下: 'PeriodFormatter yearsAndMonths =新PeriodFormatterBuilder() .printZeroAlways() .appendYears() .appendSuffix( “年”, “年”) .appendSeparator( “和 ”) .printZeroRarelyLast() .appendMonths() .appendSuffix(“ 月”, “月”) .toFormatter();' –