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;
}
, die funktionieren sollte, nicht schön, aber da Sie so viele Variationen haben kann, sollte es verwalten, was Sie wollen.
Um zu erklären, muss es eine if-Anweisung verwenden, um zu überprüfen, welche Teile des Datums nicht gleich sind, ist es nur das Jahr, der Monat oder der Tag? Je nachdem, welcher Teil fehlschlägt, wird festgelegt, welche Zeichenfolge ausgegeben werden soll. Ich habe dann Variationen verwenden der SimpleDateFormat
zur Ausgabe der gewünschten Zeichenfolge
EDIT Verwendung des folgenden Codes:
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()));
ich die folgenden Ergebnisse erhalten:
30. Mai 2012 - 29. Juni 2013
30. Mai - 29. Juni 2013
29-30 Juni 2013
30. Juni 2013
Was wäre der Typ des resultierenden Objekts? ein Treffen ? ein Faden ? – ortis
@ortis: Ich möchte eine Zeichenfolge – Jim
Was ist mit der "Januar" Informationen in 15/1/2016 passiert? Bitte posten Sie die genauen Regeln, die Sie wollen. – Tunaki