Bagaimana cara menambahkan n jam ke objek Tanggal? Saya menemukan contoh lain yang menggunakan hari di StackOverflow, tetapi masih tidak mengerti cara melakukannya dengan jam.
Bagaimana cara menambahkan n jam ke objek Tanggal? Saya menemukan contoh lain yang menggunakan hari di StackOverflow, tetapi masih tidak mengerti cara melakukannya dengan jam.
Jawaban:
Periksa Calendarkelas. Ia memiliki addmetode (dan beberapa lainnya) untuk memungkinkan manipulasi waktu.
Sesuatu seperti ini seharusnya bekerja:
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 plus one hour
Periksa API untuk lebih lanjut.
Calendar.add()menangani itu secara otomatis.
java.util.Date, java.util.Calendar, dan java.text.SimpleDateFormatsekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 & Java 9. Lihat Tutorial oleh Oracle .
Jika Anda menggunakan Apache Commons / Lang , Anda dapat melakukannya dalam satu langkah menggunakan DateUtils.addHours():
Date newDate = DateUtils.addHours(oldDate, 3);
(Objek asli tidak berubah)
DateUtils.addHours(oldDate, -1);
Untuk menyederhanakan contoh @ Christopher.
Katakanlah Anda memiliki konstanta
public static final long HOUR = 3600*1000; // in milli-seconds.
Kamu bisa menulis.
Date newDate = new Date(oldDate.getTime() + 2 * HOUR);
Jika Anda menggunakan long untuk menyimpan tanggal / waktu daripada objek Tanggal, Anda dapat melakukannya
long newDate = oldDate + 2 * HOUR;
myJavaUtilDate.toInstant()
.plusHours( 8 )
Atau…
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.
Framework java.time dibangun ke dalam Java 8 dan yang lebih baru menggantikan kelas Java.util.Date/.Calendar lama. Kelas-kelas lama itu terkenal merepotkan. Hindari mereka.
Gunakan toInstantmetode yang baru ditambahkan ke java.util.Date untuk mengonversi dari tipe lama ke tipe java.time baru. Sebuah Instantmomen di garis waktu dalam UTC dengan resolusi nanodetik .
Instant instant = myUtilDate.toInstant();
Anda dapat menambahkan jam ke jam itu Instantdengan melewatkan TemporalAmountseperti Duration.
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
Untuk membaca tanggal-waktu tersebut, buat String dalam format ISO 8601 standar dengan memanggil toString.
String output = instantHourLater.toString();
Anda mungkin ingin melihat momen itu melalui lensa waktu jam dinding suatu daerah . Sesuaikan dengan Instantzona waktu yang Anda inginkan / diharapkan dengan membuat ZonedDateTime.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Atau, Anda dapat menelepon plusHoursuntuk menambahkan hitungan jam Anda. Menjadi zona berarti Daylight Saving Time (DST) dan anomali lainnya akan ditangani atas nama Anda.
ZonedDateTime later = zdt.plusHours( 8 );
Anda harus menghindari penggunaan kelas tanggal-waktu lama termasuk java.util.Datedan .Calendar. Tetapi jika Anda benar-benar membutuhkan java.util.Dateinteroperabilitas dengan kelas yang belum diperbarui untuk tipe java.time, konversikan dari ZonedDateTimevia Instant. Metode baru yang ditambahkan ke kelas lama memfasilitasi konversi ke / dari tipe java.time.
java.util.Date date = java.util.Date.from( later.toInstant() );
Untuk diskusi lebih lanjut tentang konversi, lihat Jawaban saya untuk Pertanyaan, Konversi java.util.Date menjadi tipe "java.time" apa? .
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti java.util.Date, Calendar, & SimpleDateFormat.
Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Anda dapat bertukar objek java.time langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu string, tidak perlu java.sql.*kelas.
Dimana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperluas java.time dengan kelas tambahan. Proyek ini adalah tempat pembuktian untuk kemungkinan penambahan java.time di masa mendatang. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval, YearWeek, YearQuarter, dan lebih .
Dengan Joda-Time
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
ClassNotDefinedException
ZonedDateTimedaripada LocalDateTime. "Lokal" berarti tidak terikat pada lokalitas tertentu, dan tidak terikat pada garis waktu. Seperti "Natal dimulai pada tengah malam pada 25 Desember 2015" adalah momen yang berbeda di berbagai zona waktu, tanpa arti sampai Anda menerapkan zona waktu tertentu untuk mendapatkan momen tertentu pada garis waktu. Selain itu, tanpa zona waktu Daylight Saving Time (DST) dan anomali lainnya tidak akan ditangani dengan penggunaan LocalDateTime tersebut. Lihat Jawaban saya sebagai perbandingan.
java.util.Dateobjek seperti yang diminta pemohon kepada kami ZonedDateTime.toInstant()dan Date.from()seperti yang dijelaskan di sini stackoverflow.com/a/32274725/5661065
Menggunakan kelas java.util.concurrent.TimeUnit yang baru, Anda dapat melakukannya seperti ini
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Add 2 hours
Sesuatu seperti:
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, dan java.text.SimpleDateFormatsekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 & Java 9. Lihat Tutorial oleh Oracle .
Ini adalah bagian kode lain saat Dateobjek Anda dalam format Datetime. Keindahan dari kode ini adalah, Jika Anda memberikan lebih banyak jam, tanggal juga akan diperbarui.
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());
Berikut adalah Outputnya:
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);
Jika Anda ingin menggunakan java.time, berikut adalah metode untuk menambahkan durasi berformat ISO 8601:
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)adalah menarik, terima kasih, tetapi Anda tidak dapat menggunakan operator +pada LocalDateTime, Anda mungkin ingin mengedit itu. Tapi .plus(...)berhasil.
Dateobjek, yang mewakili momen tertentu dalam UTC. Penggunaan Anda LocalDateTimegagal untuk menjawab Pertanyaan tersebut. LocalDateTimetidak memiliki konsep zona waktu atau offset-dari-UTC, dan oleh karena itu tidak dapat mewakili momen. Kelas yang salah untuk masalah ini. Lihat Apa perbedaan antara Instant dan LocalDateTime?
DateObjek @BasilBourque tidak digunakan lagi. Pertanyaannya ambigu jika menyangkut zona waktu, jadi jawaban saya berlaku. Selain itu, Anda hanya dapat swap keluar LocalDateTimeuntuk ZonedDateTime.
Anda dapat melakukannya dengan Joda DateTime API
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
dengan menggunakan kelas Java 8. kita dapat memanipulasi tanggal dan waktu dengan sangat mudah seperti di bawah ini.
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
Dateobjek, yang mewakili momen tertentu dalam UTC. Penggunaan Anda LocalDateTimegagal untuk menjawab Pertanyaan tersebut. LocalDateTimetidak memiliki konsep zona waktu atau offset-dari-UTC, dan oleh karena itu tidak dapat mewakili momen. Kelas yang salah untuk masalah ini. Lihat Apa perbedaan antara Instant dan LocalDateTime?
Anda dapat menggunakan kelas LocalDateTime dari Java 8. Misalnya:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
Dateobjek, yang mewakili momen tertentu dalam UTC. Penggunaan Anda LocalDateTimegagal untuk menjawab Pertanyaan tersebut. LocalDateTimetidak memiliki konsep zona waktu atau offset-dari-UTC, dan oleh karena itu tidak dapat mewakili momen. Kelas yang salah untuk masalah ini. Lihat Apa perbedaan antara Instant dan LocalDateTime?
Anda dapat menggunakan metode ini, Sangat mudah untuk dipahami dan diterapkan:
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();
}