Java: getMinutes dan getHours

142

Bagaimana Anda mendapatkan Jam dan Menit sejak Date.getHoursdan Date.getMinutesmenjadi usang? Contoh yang saya temukan di pencarian Google menggunakan metode yang sudah usang.

rink.attendant.6
sumber
2
FYI, kelas tanggal-waktu yang sangat merepotkan seperti java.util.Date, java.util.Calendar, dan java.text.SimpleDateFormatsekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .
Basil Bourque

Jawaban:

171

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 = new DateTime();  // current time
int month = dt.getMonth();     // gets the current month
int 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 = new Date();   // given date
Calendar 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!
Juha Syrjälä
sumber
2
Pertanyaan: Sekarang Java 8 telah diluncurkan dengan LocalDateTime, apakah ada alasan Anda harus menggunakan Joda Time daripada LocalDateTime?
chrips
@Chrips Opini berbeda. Joda-Time secara resmi merekomendasikan penggunaan java.time.
Ole VV
96

Dari Javadoc untuk Date.getHours

As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)

Jadi gunakan

Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);

dan setara untuk getMinutes.

Menandai
sumber
6
Jadi ... bagaimana cara kerjanya jika saya ingin mendapatkan jam dari Tanggal yang tidak sesuai dengan sekarang?
Michael
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.

Secara khusus, lihat LocalDateTimekelasnya.

Jam dan menit:

LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();
JD
sumber
4
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));
James
sumber
12

tl; dr

ZonedDateTime.now().getHour()

… atau …

LocalTime.now().getHour() 

ZonedDateTime

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.

Lebih baik digunakan ZonedDateTime.

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).

tipe java.time

Tabel jenis kelas tanggal-waktu di java.time modern versus legacy.


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 .

Basil Bourque
sumber
6

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

Tobias Langner
sumber
3
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();

Fungsi-fungsi ini akan mengembalikan nilai int dalam jam dan menit.

Nouran El Kassas
sumber
1
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.

SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())

SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())
Paka
sumber
FYI, kelas tanggal-waktu yang sangat merepotkan seperti java.util.Date, java.util.Calendar, dan java.text.SimpleDateFormatsekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .
Basil Bourque
2

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.

alamar
sumber
1

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.

skaffman
sumber
1
public static LocalTime time() {
    LocalTime ldt = java.time.LocalTime.now();

    ldt = ldt.truncatedTo(ChronoUnit.MINUTES);
    System.out.println(ldt);
    return ldt;
}

Ini bekerja untuk saya

Kwik
sumber
0

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

Benjamin
sumber