Wie füge ich einem Datumsobjekt n Stunden hinzu? Ich habe ein anderes Beispiel mit Tagen in StackOverflow gefunden, verstehe aber immer noch nicht, wie man es mit Stunden macht.
Wie füge ich einem Datumsobjekt n Stunden hinzu? Ich habe ein anderes Beispiel mit Tagen in StackOverflow gefunden, verstehe aber immer noch nicht, wie man es mit Stunden macht.
Antworten:
Überprüfen Sie die Kalenderklasse. Es hat eine add
Methode (und einige andere), um Zeitmanipulationen zu ermöglichen. So etwas sollte funktionieren.
Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(new Date()); // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour
cal.getTime(); // returns new date object, one hour in the future
Überprüfen Sie die API auf weitere Informationen .
Calendar.add()
kümmert sich automatisch darum.
java.util.Date
, java.util.Calendar
und java.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 & Java 9. Siehe Tutorial von Oracle .
Wenn Sie Apache Commons / Lang verwenden , können Sie dies in einem Schritt tun DateUtils.addHours()
:
Date newDate = DateUtils.addHours(oldDate, 3);
(Das ursprüngliche Objekt ist unverändert)
DateUtils.addHours(oldDate, -1);
Um das Beispiel von @ Christopher zu vereinfachen.
Angenommen, Sie haben eine Konstante
public static final long HOUR = 3600*1000; // in milli-seconds.
Du kannst schreiben.
Date newDate = new Date(oldDate.getTime() + 2 * HOUR);
Wenn Sie anstelle des Datumsobjekts long verwenden , um Datum / Uhrzeit zu speichern, können Sie dies tun
long newDate = oldDate + 2 * HOUR;
myJavaUtilDate.toInstant()
.plusHours( 8 )
Oder…
myJavaUtilDate.toInstant() // Convert from legacy class to modern class, an `Instant`, a point on the timeline in UTC with resolution of nanoseconds.
.plus( // Do the math, adding a span of time to our moment, our `Instant`.
Duration.ofHours( 8 ) // Specify a span of time unattached to the timeline.
) // Returns another `Instant`. Using immutable objects creates a new instance while leaving the original intact.
Das in Java 8 und höher integrierte Java.time-Framework ersetzt die alten Java.util.Date/.Calendar-Klassen. Diese alten Klassen sind notorisch mühsam. Vermeide sie.
Verwenden Sie die toInstant
neu zu java.util.Date hinzugefügte Methode, um vom alten Typ in den neuen Typ java.time zu konvertieren. An Instant
ist ein Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden .
Instant instant = myUtilDate.toInstant();
Sie können dem Stunden hinzufügen, Instant
indem Sie ein TemporalAmount
solches übergeben Duration
.
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
Um diese Datums- und Uhrzeitangabe zu lesen, generieren Sie durch Aufrufen einen String im Standardformat ISO 8601 toString
.
String output = instantHourLater.toString();
Sie können von diesem Moment durch die Linse von einigen der Region sehen wollen Wanduhr Zeit . Passen Sie die Instant
Zeitzone an Ihre gewünschte / erwartete Zeitzone an, indem Sie eine erstellen ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Alternativ können Sie anrufen plusHours
, um Ihre Stundenzahl hinzuzufügen. Eine Zoneneinteilung bedeutet Sommerzeit (DST) und andere Anomalien werden in Ihrem Namen behandelt.
ZonedDateTime later = zdt.plusHours( 8 );
Sie sollten die Verwendung der alten Datums- / Uhrzeitklassen einschließlich java.util.Date
und vermeiden .Calendar
. Wenn Sie jedoch wirklich eine java.util.Date
Interoperabilität mit Klassen benötigen, die für java.time-Typen noch nicht aktualisiert wurden, konvertieren Sie von ZonedDateTime
via Instant
. Neue Methoden, die zu den alten Klassen hinzugefügt wurden, erleichtern die Konvertierung in / von java.time-Typen.
java.util.Date date = java.util.Date.from( later.toInstant() );
Weitere Informationen zum Konvertieren finden Sie in meiner Antwort auf die Frage "Java.util konvertieren". Datum in welchen Typ "java.time"? .
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für java.sql.*
Klassen.
Woher bekomme ich die java.time-Klassen?
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval
, YearWeek
, YearQuarter
, und mehr .
Mit Joda-Time
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
ClassNotDefinedException
ZonedDateTime
eher für eine als für eine entscheiden LocalDateTime
. "Lokal" bedeutet, dass es nicht an einen bestimmten Ort und nicht an die Zeitachse gebunden ist. Wie "Weihnachten beginnt am 25. Dezember 2015 um Mitternacht" ist ein anderer Moment in den verschiedenen Zeitzonen, ohne Bedeutung, bis Sie eine bestimmte Zeitzone anwenden, um einen bestimmten Moment auf der Zeitachse zu erhalten. Darüber hinaus werden ohne eine Zeitzone Sommerzeit (DST) und andere Anomalien bei einer solchen Verwendung von LocalDateTime nicht behandelt. Siehe meine Antwort zum Vergleich.
java.util.Date
Objekt zu bekommen , hatte uns der Anforderer gefragt ZonedDateTime.toInstant()
und Date.from()
wie hier beschrieben stackoverflow.com/a/32274725/5661065
Mit der neuen Klasse java.util.concurrent.TimeUnit können Sie dies folgendermaßen tun
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours
Etwas wie:
Date oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() +
(2L * hoursInMillis)); // Adds 2 hours
java.util.Date
, java.util.Calendar
und java.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 & Java 9. Siehe Tutorial von Oracle .
Dies ist ein weiterer Code, wenn Ihr Date
Objekt im Datetime-Format vorliegt. Das Schöne an diesem Code ist: Wenn Sie mehr Stunden angeben, wird auch das Datum entsprechend aktualisiert.
String myString = "09:00 12/12/2014";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy");
Date myDateTime = null;
//Parse your string to SimpleDateFormat
try
{
myDateTime = simpleDateFormat.parse(myString);
}
catch (ParseException e)
{
e.printStackTrace();
}
System.out.println("This is the Actual Date:"+myDateTime);
Calendar cal = new GregorianCalendar();
cal.setTime(myDateTime);
//Adding 21 Hours to your Date
cal.add(Calendar.HOUR_OF_DAY, 21);
System.out.println("This is Hours Added Date:"+cal.getTime());
Hier ist die Ausgabe:
This is the Actual Date:Fri Dec 12 09:00:00 EST 2014
This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014
Date argDate = new Date(); //set your date.
String argTime = "09:00"; //9 AM - 24 hour format :- Set your time.
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
String dateTime = sdf.format(argDate) + " " + argTime;
Date requiredDate = dateFormat.parse(dateTime);
Wenn Sie bereit sind zu verwenden java.time
, finden Sie hier eine Methode zum Hinzufügen von ISO 8601-formatierten Dauern:
import java.time.Duration;
import java.time.LocalDateTime;
...
LocalDateTime yourDate = ...
...
// Adds 1 hour to your date.
yourDate = yourDate.plus(Duration.parse("PT1H")); // Java.
// OR
yourDate = yourDate + Duration.parse("PT1H"); // Groovy.
Duration.parse(iso8601duration)
ist interessant, danke, aber Sie nicht Operator kann +
auf LocalDateTime
, können Sie bearbeiten möchten , dass. Funktioniert aber .plus(...)
.
Date
Objekt, das einen bestimmten Moment in UTC darstellt. Ihre Verwendung von LocalDateTime
kann die Frage nicht beantworten. LocalDateTime
Es fehlt ein Konzept der Zeitzone oder des Versatzes von UTC und kann daher keinen Moment darstellen. Falsche Klasse für dieses Problem. Siehe Was ist der Unterschied zwischen Instant und LocalDateTime?
Date
Objekt ist veraltet. Die Frage ist in Bezug auf die Zeitzone nicht eindeutig, daher stehen meine Antworten. Darüber hinaus können Sie nur die Swap LocalDateTime
für ZonedDateTime
.
Sie können dies mit der Joda DateTime-API tun
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
mithilfe von Java 8-Klassen. Wir können Datum und Uhrzeit sehr einfach wie unten manipulieren.
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
Date
Objekt, das einen bestimmten Moment in UTC darstellt. Ihre Verwendung von LocalDateTime
kann die Frage nicht beantworten. LocalDateTime
Es fehlt ein Konzept der Zeitzone oder des Versatzes von UTC und kann daher keinen Moment darstellen. Falsche Klasse für dieses Problem. Siehe Was ist der Unterschied zwischen Instant und LocalDateTime?
Sie können die LocalDateTime-Klasse aus Java 8 verwenden. Zum Beispiel:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
Date
Objekt, das einen bestimmten Moment in UTC darstellt. Ihre Verwendung von LocalDateTime
kann die Frage nicht beantworten. LocalDateTime
Es fehlt ein Konzept der Zeitzone oder des Versatzes von UTC und kann daher keinen Moment darstellen. Falsche Klasse für dieses Problem. Siehe Was ist der Unterschied zwischen Instant und LocalDateTime?
Sie können diese Methode verwenden. Es ist leicht zu verstehen und zu implementieren:
public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, nombreHeure);
calendar.add(Calendar.MINUTE, nombreMinute);
calendar.add(Calendar.SECOND, nombreSeconde);
return calendar.getTime();
}