将2个日期与一种格式合并?

时间:2016-05-11 12:52:50

标签: java calendar jodatime

是否可以定义组合2个日期的格式?
例如。假设我有date1例如2016年1月15日和date2。例如20/1/2016 有什么格式可以用来表示类似的东西:
2016年1月15日至20日?

其他例子:
例如。假设我有date1例如2016年1月15日和date2。例如20/5/2016 结果:2016年1月15日至5月20日

4 个答案:

答案 0 :(得分:3)

这是一种方法。当然,这并未考虑日期可能在不同的月份或年份。需要startDate的月份和年份。

LocalDate startDate = LocalDate.of(2016, 5, 15);
LocalDate endDate = LocalDate.of(2016, 5, 20);

String text = String.format("%1$te-%2$te %1$tB %1$tY", startDate, endDate);

System.out.println(text);

请参阅the documentation了解格式字符串的工作原理。

注意:这使用Java 8 java.time.LocalDate而不是Joda Time。

答案 1 :(得分:1)

2016年5月15日至20日 - 这不是真正的日期格式。我不认为有任何格式可以做到这一点。但你可以定义自己的方法,它将返回一个字符串 如果您使用的是Java 8,请使用localDate

LocalDate myDate = new LocalDate("2016-5-15");
LocalDate endDate =new LocalDate(2016-5-20);

String format = mydate.getDayOfMonth() 
+"-"+ endDate.getDayOfMonth() 
+" "+endDate.getMonth().toString()
+" "+endDate.getYear();

答案 2 :(得分:0)

public String dateRangeToString(Date date1, Date date2){
    Calendar firstCal = Calendar.getInstance();
    firstCal.setTime(date1);
    Calendar secondCal = Calendar.getInstance();
    secondCal .setTime(date2);
    if (firstCal.getTimeInMillis() > secondCal.getTimeInMillis()){
        firstCal.setTime(date2);
        secondCal .setTime(date1);
    }
    String result;
    SimpleDateFormat format = new SimpleDateFormat("dd MMMM yyyy");
    if (firstCal.get(Calendar.YEAR) < secondCal.get(Calendar.YEAR)){
        result = format.format(firstCal.getTime()) + " - "  + format.format(secondCal.getTime());
    }
    else if (firstCal.get(Calendar.MONTH) < secondCal.get(Calendar.MONTH)){
        SimpleDateFormat formatTemp = new SimpleDateFormat("dd MMMM");
        result = formatTemp .format(firstCal.getTime()) + " - "  + format.format(secondCal.getTime());
    }
    else if (firstCal.get(Calendar.DAY_OF_MONTH) < secondCal.get(Calendar.DAY_OF_MONTH)){
        SimpleDateFormat formatTemp = new SimpleDateFormat("dd");
        result = formatTemp .format(firstCal.getTime()) + " - " + format.format(secondCal.getTime());
    }
    else{//Both dates are equal
        result = format.format(firstCal.getTime());
    }
    return result;
}

这应该有效,不漂亮,但由于你可以有很多变化,它应该管理你想要的东西。

要解释一下,它必须使用if语句来检查日期的哪些部分不相等,它只是年,月或日?根据失败的部分将决定输出哪个字符串。然后我使用SimpleDateFormat的变体来输出所需的字符串

修改 使用以下代码:

    Calendar calendar = Calendar.getInstance();
    calendar.set(2013,5,29);
    Calendar calendar2 = Calendar.getInstance();
    calendar2.set(2012,4,30);
    System.out.println(dateRangeToString(calendar.getTime(), calendar2.getTime()));


    calendar.set(2013,5,29);
    calendar2.set(2013,4,30);
    System.out.println(dateRangeToString(calendar.getTime(), calendar2.getTime()));

    calendar.set(2013,5,29);
    calendar2.set(2013,5,30);
    System.out.println(dateRangeToString(calendar.getTime(), calendar2.getTime()));


    calendar.set(2013,5,30);
    calendar2.set(2013,5,30);
    System.out.println(dateRangeToString(calendar.getTime(), calendar2.getTime()));

我得到以下结果:

  

2012年5月30日至2013年6月29日

     

2013年5月30日至6月29日

     

2013年6月29日至30日

     

2013年6月30日

答案 3 :(得分:0)

ISO 8601

ISO 8601标准定义了各种日期时间值的文本表示格式。

表示时间跨度的标准方法是使用格式为YYYY-MM-DD的日期对,用斜杠字符连接。

  

2016年1月15日/二零一六年五月二十零日

LocalDate

使用Java 8及更高版本中内置的java.time框架中的LocalDate类,使用一对名为LocalDatestart的{​​{1}}个对象。

stop