Bagaimana Anda mendapatkan Jam dan Menit sejak Date.getHoursdan Date.getMinutesmenjadi usang? Contoh yang saya temukan di pencarian Google menggunakan metode yang sudah usang.
Coba gunakan Joda Time alih-alih kelas java.util.Date standar. Pustaka Joda Time memiliki API yang jauh lebih baik untuk menangani tanggal.
DateTime dt =newDateTime();// current timeint month = dt.getMonth();// gets the current monthint hours = dt.getHourOfDay();// gets hour of day
Lihat pertanyaan ini untuk pro dan kontra menggunakan perpustakaan Joda Time.
Joda Time juga dapat dimasukkan ke beberapa versi Java di masa mendatang sebagai komponen standar, lihat JSR-310 .
Jika Anda harus menggunakan kelas java.util.Date dan java.util.Calendar tradisional, lihat JavaDoc untuk bantuan ( java.util.Calendar dan java.util.Date ).
Anda bisa menggunakan kelas tradisional seperti ini untuk mengambil bidang dari instance Date yang diberikan.
Date date =newDate();// given dateCalendar calendar =GregorianCalendar.getInstance();// creates a new calendar instance
calendar.setTime(date);// assigns calendar to given date
calendar.get(Calendar.HOUR_OF_DAY);// gets hour in 24h format
calendar.get(Calendar.HOUR);// gets hour in 12h format
calendar.get(Calendar.MONTH);// gets month number, NOTE this is zero based!
Kelas mengerikan ini digantikan bertahun-tahun yang lalu oleh kelas java.time modern , dengan adopsi JSR 310. Gunakan ZonedDateTimesaja.
Basil Bourque
58
waktu java
Sementara saya penggemar Joda-Time , Java 8 memperkenalkan paket java.time yang akhirnya merupakan solusi standar Java yang berharga! Baca artikel ini, Tanggal dan Waktu Java 8 8 , untuk sejumlah besar informasi tentang java.time di luar jam dan menit.
Ini jawaban terbaik. Anda mungkin ingin memberikan zona waktu eksplisit untuk mengingatkan pembaca dan diri sendiri bahwa ini adalah zona waktu operasi sensitif: LocalDateTime.now(ZoneId.of("Asia/Manilla")). Baca now()hanya sekali untuk konsistensi (waktu akan berlalu di antara dua panggilan). Jika tanggal benar-benar tidak relevan, LocalTimeberfungsi juga.
Ole VV
1
Terima kasih untuk ini. Entah bagaimana aku telah merindukan kelas yang dibangun di kelas ini untuk waktu yang lama!
chrips
Komentar dari Ole VV benar. Namun yang lebih baik, gunakan ZonedDateTimekelas daripada LocalDateTime. Dengan LocalDateTimeAnda membuang informasi zona waktu yang berharga tanpa alasan, tanpa hasil apa pun.
Basil Bourque
Berguna jika Anda tidak harus kompatibel dengan mundur. Sayangnya tidak cocok jika Anda menulis untuk Android dan mendukung versi API yang lebih lama (atau dalam hal lain ketika Java 8 tidak selalu tersedia).
M_M
@M_M Untuk Java 6 & 7, sebagian besar fungsi java.time di -porting di pustaka ThreeTen-Backport . Lebih lanjut diadaptasi ke Android awal di ThreeTenABP . Untuk tautan, lihat bagian terakhir dari Jawaban saya .
Basil Bourque
36
Pertama, impor java.util.Calendar
Calendar now =Calendar.getInstance();System.out.println(now.get(Calendar.HOUR_OF_DAY)+":"+ now.get(Calendar.MINUTE));
The Answer oleh JD baik tetapi tidak optimal. Jawaban itu menggunakan LocalDateTimekelas. Karena tidak memiliki konsep zona waktu atau offset-dari-UTC, kelas itu tidak dapat mewakili momen.
ZoneId z =ZoneID.of("America/Montreal");ZonedDateTime zdt =ZonedDateTime.now( z );
Tentukan zona waktu
Jika Anda menghilangkan ZoneIdargumen, satu diterapkan secara implisit saat runtime menggunakan zona waktu default JVM saat ini.
Jadi ini:
ZonedDateTime.now()
... sama dengan ini:
ZonedDateTime.now(ZoneId.systemDefault())
Lebih baik secara eksplisit, melewati zona waktu yang Anda inginkan / harapkan. Default dapat berubah setiap saat selama runtime.
Jika kritis, konfirmasikan zona waktu dengan pengguna.
Jam-menit
Menginterogasi ZonedDateTimeuntuk jam dan menit.
int hour = zdt.getHour();int minute = zdt.getMinute();
LocalTime
Jika Anda ingin hanya hari tanpa zona waktu, ekstrak LocalTime.
LocalTime lt = zdt.toLocalTime();
Atau lewati ZonedDateTimesepenuhnya, langsung ke LocalTime.
LocalTime lt =LocalTime.now( z );// Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk java.sql.*kelas.
Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval, YearWeek, YearQuarter, dan lebih .
Coba Kalender. Gunakan getInstance untuk mendapatkan Calender-Object. Kemudian gunakan setTime untuk mengatur Tanggal yang diperlukan. Sekarang Anda bisa menggunakan get (int field) dengan konstanta yang sesuai seperti HOUR_OF_DAY atau lebih untuk membaca nilai yang Anda butuhkan.
Duplikat. Pendekatan ini sudah tercakup dalam Jawaban oleh JD .
Basil Bourque
Apakah itu java.sql.Time? Tentu saja tidak ada alasan sama sekali untuk memainkan kelas yang sudah ketinggalan zaman itu saat Anda punya java.time.LocalTime. Anda terlalu rumit.
Ole VV
Sepertinya getMinutes()sudah tidak digunakan lagi (Saya menggunakan java 1.8) dan telah diganti denganCalendar.get(Calendar.MINUTE)
Saltz3
3
Satu lagi cara untuk mendapatkan menit dan jam adalah dengan menggunakan SimpleDateFormat.
Saya takut menambahkan perpustakaan lain ke proyek saya yang tebal, tetapi hanya mudah dan cepat dan cerdas serta mengagumkan. Plus, ini berfungsi baik dengan kode yang ada, sampai batas tertentu.
Meskipun saya tidak akan merekomendasikan melakukannya, saya pikir itu layak menunjukkan bahwa meskipun banyak metode di java.util.Date telah ditinggalkan, mereka masih bekerja. Dalam situasi sepele, mungkin boleh saja menggunakannya. Juga, java.util.Calendar sangat lambat, jadi getMonth dan getYear on Date mungkin berguna lebih cepat.
import java.util.*Anda bisa mendapatkan jam dan menit menggunakan kalender dan kelas formatter. Calendar cal = Calendar.getInstance()dan Formatter fmt=new Formatter()dan mengatur format untuk menampilkan jam dan menit fmt.format("%tl:%M",cal,cal)dan System.out.println(fmt) hasil cetak menunjukkan seperti10:12
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .Jawaban:
Coba gunakan Joda Time alih-alih kelas java.util.Date standar. Pustaka Joda Time memiliki API yang jauh lebih baik untuk menangani tanggal.
Lihat pertanyaan ini untuk pro dan kontra menggunakan perpustakaan Joda Time.
Joda Time juga dapat dimasukkan ke beberapa versi Java di masa mendatang sebagai komponen standar, lihat JSR-310 .
Jika Anda harus menggunakan kelas java.util.Date dan java.util.Calendar tradisional, lihat JavaDoc untuk bantuan ( java.util.Calendar dan java.util.Date ).
Anda bisa menggunakan kelas tradisional seperti ini untuk mengambil bidang dari instance Date yang diberikan.
sumber
Dari Javadoc untuk Date.getHours
As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)
Jadi gunakan
dan setara untuk getMinutes.
sumber
ZonedDateTime
saja.waktu java
Sementara saya penggemar Joda-Time , Java 8 memperkenalkan paket java.time yang akhirnya merupakan solusi standar Java yang berharga! Baca artikel ini, Tanggal dan Waktu Java 8 8 , untuk sejumlah besar informasi tentang java.time di luar jam dan menit.
Secara khusus, lihat
LocalDateTime
kelasnya.Jam dan menit:
sumber
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
. Bacanow()
hanya sekali untuk konsistensi (waktu akan berlalu di antara dua panggilan). Jika tanggal benar-benar tidak relevan,LocalTime
berfungsi juga.ZonedDateTime
kelas daripadaLocalDateTime
. DenganLocalDateTime
Anda membuang informasi zona waktu yang berharga tanpa alasan, tanpa hasil apa pun.Pertama, impor java.util.Calendar
sumber
tl; dr
… atau …
ZonedDateTime
The Answer oleh JD baik tetapi tidak optimal. Jawaban itu menggunakan
LocalDateTime
kelas. Karena tidak memiliki konsep zona waktu atau offset-dari-UTC, kelas itu tidak dapat mewakili momen.Lebih baik digunakan
ZonedDateTime
.Tentukan zona waktu
Jika Anda menghilangkan
ZoneId
argumen, satu diterapkan secara implisit saat runtime menggunakan zona waktu default JVM saat ini.Jadi ini:
... sama dengan ini:
Lebih baik secara eksplisit, melewati zona waktu yang Anda inginkan / harapkan. Default dapat berubah setiap saat selama runtime.
Jika kritis, konfirmasikan zona waktu dengan pengguna.
Jam-menit
Menginterogasi
ZonedDateTime
untuk jam dan menit.LocalTime
Jika Anda ingin hanya hari tanpa zona waktu, ekstrak
LocalTime
.Atau lewati
ZonedDateTime
sepenuhnya, langsung keLocalTime
.tipe java.time
Tentang java.time
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
.Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi adalah JSR 310 .
Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk
java.sql.*
kelas.Di mana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti
Interval
,YearWeek
,YearQuarter
, dan lebih .sumber
Coba Kalender. Gunakan getInstance untuk mendapatkan Calender-Object. Kemudian gunakan setTime untuk mengatur Tanggal yang diperlukan. Sekarang Anda bisa menggunakan get (int field) dengan konstanta yang sesuai seperti HOUR_OF_DAY atau lebih untuk membaca nilai yang Anda butuhkan.
http://java.sun.com/javase/6/docs/api/java/util/Calendar.html
sumber
Fungsi-fungsi ini akan mengembalikan nilai int dalam jam dan menit.
sumber
java.sql.Time
? Tentu saja tidak ada alasan sama sekali untuk memainkan kelas yang sudah ketinggalan zaman itu saat Anda punyajava.time.LocalTime
. Anda terlalu rumit.getMinutes()
sudah tidak digunakan lagi (Saya menggunakan java 1.8) dan telah diganti denganCalendar.get(Calendar.MINUTE)
Satu lagi cara untuk mendapatkan menit dan jam adalah dengan menggunakan SimpleDateFormat.
sumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .Saya akan merekomendasikan mencari waktu iklan joda. http://www.joda.org/joda-time/
Saya takut menambahkan perpustakaan lain ke proyek saya yang tebal, tetapi hanya mudah dan cepat dan cerdas serta mengagumkan. Plus, ini berfungsi baik dengan kode yang ada, sampai batas tertentu.
sumber
Meskipun saya tidak akan merekomendasikan melakukannya, saya pikir itu layak menunjukkan bahwa meskipun banyak metode di java.util.Date telah ditinggalkan, mereka masih bekerja. Dalam situasi sepele, mungkin boleh saja menggunakannya. Juga, java.util.Calendar sangat lambat, jadi getMonth dan getYear on Date mungkin berguna lebih cepat.
sumber
Ini bekerja untuk saya
sumber
import java.util.*
Anda bisa mendapatkan jam dan menit menggunakan kalender dan kelas formatter.Calendar cal = Calendar.getInstance()
danFormatter fmt=new Formatter()
dan mengatur format untuk menampilkan jam dan menitfmt.format("%tl:%M",cal,cal)
danSystem.out.println(fmt)
hasil cetak menunjukkan seperti10:12
sumber