与joda时间的日期差异

时间:2014-07-24 08:16:27

标签: java date jodatime

我下载了joda库并提取了joda时间来计算时差, 这是我的班级计算日期差异:(我使用Java 1.7

public class TimeDiffereneceTest {

static String secondDate,firstDate, dateDifference;


public static void main(String[] args) {
    firstDate = "2014/07/20";
    secondDate = getTodayDate();     // Generate 2014/07/23

    DateDifference(firstDate, secondDate);

}

public static String getTodayDate() {
    Calendar todayDate = Calendar.getInstance();
    SimpleDateFormat simpleFormat = new SimpleDateFormat("YYYY/MM/dd");
    String strDate = simpleFormat.format(todayDate.getTime());
    return strDate;
}

public static void DateDifference(String firstDate,String nowDate) {
    Date d1=null;
    Date d2=null;

    SimpleDateFormat format = new SimpleDateFormat("YYYY/MM/dd");

    try{
        d1 = format.parse(firstDate);
        d1 = format.parse(nowDate);

        DateTime dt1 = new DateTime(d1);
        DateTime dt2 = new DateTime(d2);

        System.out.println("Day difference is: "+Days.daysBetween(dt1, dt2).getDays()); // 206!

    }
    catch(Exception e){
        e.printStackTrace();
    }

}
}

结果应为3,因为今天的日期为2014/07/23,第一个日期为"2014/07/20",但结果错误(206)。

3 个答案:

答案 0 :(得分:1)

我发现代码存在一些问题: 1)新的SimpleDateFormat应抛出非法论据,因为“YYYY”应该是“yyyy”(至少对我而言这是有效的) 2)在DateDifference中(应该是名称dateDifference,因为它是一个方法,而不是类 - 命名方法)  你有

d1 = format.parse(firstDate);
d1 = format.parse(nowDate);

而不是

d1 = simpleFormat.parse(firstDate);
d2 = simpleFormat.parse(nowDate);

尝试使用此代码,它适用于我。

public class TimeDiffereneceTest {

static String secondDate,firstDate, dateDifference;
static SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy/MM/dd");


public static void main(String[] args) {
    firstDate = "2014/07/20";
    secondDate = getTodayDate();     // Generate 2014/07/23

    DateDifference(firstDate, secondDate);

}

public static String getTodayDate() {
    Calendar todayDate = Calendar.getInstance();
    String strDate = simpleFormat.format(todayDate.getTime());
    return strDate;
}

public static void DateDifference(String firstDate,String nowDate) {
    Date d1=null;
    Date d2=null;


    try{
        d1 = simpleFormat.parse(firstDate);
        d2 = simpleFormat.parse(nowDate);

        DateTime dt1 = new DateTime(d1);
        DateTime dt2 = new DateTime(d2);

        System.out.println("Day difference is: "+Days.daysBetween(dt1, dt2).getDays()); // 206!

    }
    catch(Exception e){
        e.printStackTrace();
    }

}
}

答案 1 :(得分:0)

您使用的是哪个java版本?

7,资本Yy的含义不同。在6 Y未指定,因此它抛出以下异常:

java.lang.IllegalArgumentException: Illegal pattern character 'Y'

答案 2 :(得分:0)

您的代码有两个我可以看到的问题(除了随机未使用的静态)。

  1. Y不是年份的格式代码,y是。
  2. d2为null,您将两个字符串解析为d1。
  3. 以下代码在今天运行时给出了4,' 2014/07/24'。

    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
    String firstDate = "2014/07/20";
    String secondDate = format.format(new Date());
    
    int days = Days.daysBetween(new DateTime(format.parse(firstDate)), new DateTime(format.parse(secondDate))).getDays();
    System.out.println(days);