2016-05-30 2 views
2

Derzeit arbeite ich mit Versandbedingung. in diesem werde ich cut off time gegen die Firma wie (05.00 PM) erhalten. Jetzt möchte ich oben Zeit mit der aktuellen Zeit vergleichen, ob es vor cut off time oder nach cut off time ist? Ich bin durch alle Verbindung gegangen, die ich nur Beispiel mit date sehen kann. Ich konnte nichts mit der Zeit finden. Bitte lassen Sie mich wissen oder geben Sie einen Hinweis, damit ich aussortiert werde.Wie kann die Abschaltzeit vor oder nach der aktuellen Zeitinstanz überprüft werden?

Das ist was ich

String todayDate=LocalDate.now().toString("dd.MM.yyyy"); 

String s=todayDate+cutOffTime;//cutOffTime will get from DB 
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd.MM.yyyy HH:mm a"); 
LocalDate despatchDate=LocalDate.now(); 
try { 
    Date cutoffDate=simpleDateFormat.parse(s); 
    if (cutoffDate.after(Calendar.getInstance().getTime())){ 
     despatchDate.plusDays(1); 
    } 

} catch (ParseException e) { 
    e.printStackTrace(); 
} 
+0

Mischen Sie nicht die neuen und alten Datum-Uhrzeit-Klassen. Die neuen sind im Paket java.time enthalten, das in Java 8 und höher integriert ist. Die alten sind außerhalb des Pakets java.time und sollten vermieden werden (java.util.Date, java.util.Calendar, java.text.SimpleDateFormat). Die alte Klasse erhielt einige neue Methoden, um die Konvertierung zwischen den alten und neuen Datentypen zu erleichtern. –

Antwort

2

Java 8 Datum/Uhrzeit api

LocalDateTime currentDateTime = LocalDateTime.now(); 
LocalDate currentDate = LocalDate.now(); 
String cutOff = "05:00 AM"; 
DateTimeFormatter timeParser = DateTimeFormatter.ofPattern("hh:mm a"); 
LocalTime cutOffTime = timeParser.parse(cutOff, LocalTime::from); 
LocalDateTime cutOffDateTime = LocalDateTime.of(currentDate, cutOffTime); 
//After 
cutOffDateTime.isAfter(currentDateTime); 
//Before 
cutOffDateTime.isBefore(currentDateTime); 
//Compare 
cutOffDateTime.compareTo(currentDateTime); 
+0

Danke für die Antwort. Warum bekomme ich Fehler, wenn eine Änderung "AM" zu "PM"? – anonymous

+2

Ändern Sie das Zeitformat in "hh: mm a", wenn Sie das 12-Stunden-Format verwenden. – Veeram

+0

danke seine Arbeit – anonymous

1

Zeitzone

Die Answer by Shiv V ist in die richtige Richtung, so weit versucht, aber ist nicht genau richtig. Die Antwort ignoriert das entscheidende Problem von time zone. Die Local… Typen verlieren absichtlich und ignorieren Zeitzoneninformationen, das ist ihr Zweck. Aber wir wollen nur selten Zeitzoneninformationen verlieren.

Die Bestimmung von Datum und Uhrzeit hängt von der Zeitzone ab. Für jeden Moment können Datum und Uhrzeit weltweit variieren. Ein paar Minuten nach Mitternacht in Paris ist ein neuer Tag noch "gestern" in Montréal. Die Klasse Instant definiert einen Moment auf der Timeline in UTC mit einer Auflösung von nanoseconds.

Instant now = Instant.now(); 

Wenn der gewünschte Termin "17:00 Uhr morgen" ist, müssen Sie die Zeitzone als Kontext angeben. Wenden Sie eine ZoneId auf eine Instant an, um eine ZonedDateTime zu erhalten.

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 
ZonedDateTime zdtTomorrow = zdt.plusDays(1); 

Jetzt auf 5 Uhr einstellen.

LocalTime timeOfDayWhenDue = LocalTime.of(5 , 0); 
ZonedDateTime zdtDeadline = zdtTomorrow.with(timeOfDayWhenDue); 

Sie vergleichen können die isEqual, isBefore und isAfter Methoden.

ZonedDateTime now = ZonedDateTime.now(zoneId); 
boolean overdue = now.isAfter(zdtDeadline); 

Sie könnten auch die zoned Datum-Zeiten zurück in UTC konvertieren. Die ZonedDateTime Objekte und ihre jeweiligen Instant Objekte repräsentieren den gleichen simultanen Moment auf der Zeitlinie (gleicher Moment in der Geschichte), aber aus der Sicht verschiedener Zeitzonen gesehen (America/Montreal gegenüber UTC).

Wenn Sie die Frist einem Kunden in Indien mitteilen möchten, passen Sie in eine andere Zeitzone. Der Datum-Uhrzeit-Wert repräsentiert das gleiche Moment auf der Zeitleiste, wird jedoch mit einer wall-clock time angezeigt, die für diesen Kunden eine Bedeutung hat.

ZoneId zoneId_Kolkata = ZoneId.of("Asia/Kolkata"); 
ZonedDateTime zdtDeadline_Kolkata = zdtDeadline.withZoneSameInstant(zoneId_Kolkata); 

Wenn Sie angeben, Zeitzonen nicht, der aktuelle Standard-Zeitzone des JVM wird implizit, still angewandt. Nicht gut. Zum einen machen implizite Annahmen Ihren Code leicht zu missverstehen und Fehler schwieriger zu lokalisieren.Schlimmer noch, der Standard kann jederzeit ändern, wenn Sie auf einem anderen Computer bereitstellen, oder sogar während der Laufzeit zu jedem Zeitpunkt der Ausführung Ihrer App! Besser immer die gewünschte/erwartete Zeitzone angeben. Das gleiche gilt übrigens für Locale.

+0

Danke für die ausführliche Antwort. – anonymous