2016-04-21 19 views
0

Ich möchte ein java.util.Date Objekt bis zum Ende des Tages, z. Rundung 2016-04-21T10:28:18.109Z zu 2016-04-22T00:00:00.000Z.Runden java.util.Date bis zum Ende des Tages

Ich sah Java Date rounding, war aber nicht in der Lage, etwas für das Ende des Tages vergleichbar zu finden. Es ist auch nicht dasselbe wie how to create a Java Date object of midnight today and midnight tomorrow?, weil ich nicht ein neues Date (Mitternacht heute oder morgen), aber die nächste Mitternacht basierend auf einem bestimmten Datum erstellen möchte.

+1

Aber warum? Scheinbar verwenden Sie Java 8, warum also nicht einfach die neue Zeit-API verwenden? – Tunaki

+0

Weil es ein sehr großes Projekt ist, in dem ich mich nicht entschließen kann, das zu verwenden. –

+5

Sie können also APIs von Drittanbietern verwenden, aber die integrierten JDK-APIs nicht verwenden? Dies ist normalerweise umgekehrt. – Tunaki

Antwort

1

Die DateUtils.ceiling erfüllt Ihren Zweck. Übergeben Sie Calendar.DATE für Feldwert.

+0

Das macht genau das, was ich erwartet habe. Und es ist die kürzeste Lösung. Vielen Dank. –

1

Angesichts der Dokumentation von DateUtils, ich bin mir nicht sicher, ob ich ihm damit vertrauen würde.

Vorausgesetzt, dass Sie in einem UTC Tag nur daran interessiert sind, können Sie die Vorteile der Tatsache, dass die Unix-Epoche auf ein Datum Grenze:

public static Date roundUpUtcDate(Date date) { 
    long millisPerDay = TimeUnit.DAYS.toMillis(1); 
    long inputMillis = date.getTime(); 
    long daysRoundedUp = (inputMillis + (millisPerDay - 1))/millisPerDay; 
    return new Date(daysRoundedUp * millisPerDay); 
} 

Ich würde stark Sie drängen, die bewegen java.time API wenn Sie möglicherweise können, obwohl.

0

traditionelle Weise

@Test 
public void testDateRound() throws ParseException { 
    Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse("2016-04-21T10:28:18.109Z"); 
    System.out.println(date); 
    Calendar cl = Calendar.getInstance(); 
    cl.setTime(date); 
    cl.set(Calendar.HOUR_OF_DAY, 23); 
    cl.set(Calendar.MINUTE, 59); 
    cl.set(Calendar.SECOND, 59); 
    cl.set(Calendar.MILLISECOND, 999); 
    System.out.println(cl.getTime()); 
    cl.add(Calendar.MILLISECOND, 1); 
    System.out.println(cl.getTime()); 
} 

Ausgabe

Thu Apr 21 10:28:18 GMT+03:00 2016 
Thu Apr 21 23:59:59 GMT+03:00 2016 
Fri Apr 22 00:00:00 GMT+03:00 2016 
Verwandte Themen