是否可以定义组合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日
答案 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标准定义了各种日期时间值的文本表示格式。
表示时间跨度的标准方法是使用格式为YYYY-MM-DD的日期对,用斜杠字符连接。
2016年1月15日/二零一六年五月二十零日
LocalDate
使用Java 8及更高版本中内置的java.time框架中的LocalDate
类,使用一对名为LocalDate
和start
的{{1}}个对象。
stop