如果月份是3个字母的字符串,如何计算2个日期之间的年数

时间:2016-05-13 14:56:44

标签: java scala datetime jodatime

我有以下格式的2个日期,其中月份为3个字母的字符串

  

1988-JUL-21

     

2016 - 12月18

如何以上述格式计算日期之间的年数?

我能够计算月份是使用Joda时间整数的月份之间的差异,如下所示

val y = Years.yearsBetween(new LocalDate("1988-12-21"), new LocalDate("2016-1-18"))
println( y.getYears)
Output: 27

3 个答案:

答案 0 :(得分:3)

您使用DateTimeFormat来调用LocalDate.parse(String, DateTimeFormatter)方法。像,

public KeyStrokes() {
    super("Swing Window");
    setSize(500, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    add(pnl);
    pnl.add(field);
    pnl.add(txtArea);
    setVisible(true);
    field.addKeyListener(this);
}

答案 1 :(得分:1)

以下是如何使用DateTimeFormatter来解析日期来继续使用纯Java 8:

// The formatter to use when parsing the dates with a locale 
// defined to prevent failures on non english environment
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd", Locale.US);
System.out.println(
    ChronoUnit.YEARS.between(
        LocalDate.parse("1988-Jul-21", formatter), 
        LocalDate.parse("2016-Dec-18", formatter)
    )
);

<强>输出:

28

答案 2 :(得分:0)

您可以使用的强力方法只是将字母字符串转换为正确的int值。你可以使用像这样的数组。

String[11] months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

然后你可以循环查找你当前月份与其中一个月份匹配的时间,然后取i val + 1(因为它基于零)。

在我看来,这比写出12条if语句更好。

for (int i = 0; i < months.length; i++) {
     //where monthStr is a String that is the 3 letter month representaton
     if (monthStr = months[i]) {
         int monthInt = i + 1;
     }

}