Java: getMinutes ve getHours


142

O zamandan bu yana nasıl Saat ve Dakika alıyorsunuz Date.getHoursve Date.getMinuteskullanımdan kaldırılıyor? Google aramada bulduğum örnekler kullanımdan kaldırılmış yöntemler kullandı.


2
Bilginize gibi korkunç zahmetli tarih-saat sınıfları java.util.Date, java.util.Calendarve java.text.SimpleDateFormatşimdi mirası supplanted, java.time sonra Java 8 ve yerleşik sınıflara. Oracle'ın Öğreticisine bakın .
Basil Bourque

Yanıtlar:


171

Standart java.util.Date sınıfları yerine Joda Time'ı kullanmayı deneyin . Joda Time kütüphanesi, tarihleri ​​işlemek için çok daha iyi bir API'ya sahiptir.

DateTime dt = new DateTime();  // current time
int month = dt.getMonth();     // gets the current month
int hours = dt.getHourOfDay(); // gets hour of day

Joda Time kütüphanesini kullanmanın avantaj ve dezavantajları için bu soruya bakın .

Joda Time ayrıca Java'nın gelecekteki bazı sürümlerine standart bir bileşen olarak dahil edilebilir, bkz. JSR-310 .


Geleneksel java.util.Date ve java.util.Calendar sınıflarını kullanmanız gerekiyorsa, yardım için JavaDoc'larına bakın ( java.util.Calendar ve java.util.Date ).

Verilen Date örneğindeki alanları getirmek için bunun gibi geleneksel sınıfları kullanabilirsiniz.

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!

2
Soru: Artık Java 8, LocalDateTime ile kullanıma sunulduğundan, Joda Time'ı LocalDateTime üzerinden kullanmanız için herhangi bir neden var mı?
chrips

@Chrips Görüşler farklı. Joda-Time resmi olarak java.time kullanılmasını önerir.
Ole VV

96

Date.getHours için Javadoc'tan

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

Öyleyse kullan

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

ve getMinutes için eşdeğeridir.


6
Öyleyse ... şu ana kadar karşılık gelmeyen bir Tarihten saatleri almak istersem bu nasıl çalışır?
Michael


Bu korkunç sınıf yıllar önce JSR 310'un benimsenmesiyle modern java.time sınıfları tarafından desteklendi ZonedDateTime. Bunun yerine kullanın .
Basil Bourque

58

java.time

Joda-Time hayranıyım , Java 8 nihayet değerli bir Java standart çözümü olan java.time paketini tanıtıyor ! Java.time hakkında saatler ve dakikalar dışında iyi miktarda bilgi için Java SE 8 Tarih ve Saat makalesini okuyun .

Özellikle LocalDateTimesınıfa bakın.

Saatler ve dakikalar:

LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();

4
Bu en iyi cevap. Bunun bir zaman dilimi duyarlı bir operasyon olduğunu okuyucu ve kendinize hatırlatmak için açık saat dilimini sağlamak isteyebilirsiniz: LocalDateTime.now(ZoneId.of("Asia/Manilla")). now()Tutarlılık için yalnızca bir kez okuyun (iki arama arasında zaman geçecektir). Tarih gerçekten alakasızsa, LocalTimeişe yarıyor.
Ole VV

1
Bunun için teşekkür ederim. Uzun zamandır bu harika yerleşik sınıfta bir şekilde KAÇTI!
chrips

Ole VV'nin yorumu doğrudur. Ama daha da iyisi, ZonedDateTimesınıf yerine kullanın LocalDateTime. İle LocalDateTimesen hiçbir şey, hiçbir neden değerli zaman dilimi bilgilerini atarak vardır kazandı.
Basil Bourque

Geriye dönük uyumlu olmanız gerekmiyorsa kullanışlıdır. Android için yazıyorsanız ve daha eski API sürümlerini destekliyorsanız (veya Java 8'in her zaman kullanılabilir olmadığı başka bir durumda) üzülerek uygun değildir.
M_M

@M_M Java 6 ve 7 için java.time işlevselliğinin çoğu ThreeTen-Backport kütüphanesinde geriye taşınır . Ayrıca ThreeTenABP'de erken Android'e uyarlandı . Bağlantılar için son bölümüne bakın benim Yanıt .
Basil Bourque

36

İlk olarak, java.util.Calendar dosyasını içe aktarın

Calendar now = Calendar.getInstance();
System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));

12

tl; Dr.

ZonedDateTime.now().getHour()

… Ya da…

LocalTime.now().getHour() 

ZonedDateTime

JD tarafından cevap iyi değil en uygunudur. Bu cevap LocalDateTimesınıfı kullanır . Herhangi bir saat dilimi veya UTC'den sapma kavramına sahip olmayan bu sınıf, bir anı temsil edemez.

Kullanmak daha iyi ZonedDateTime.

ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

Saat dilimini belirtin

ZoneIdArgümanı atlarsanız, JVM'nin geçerli varsayılan saat dilimi kullanılarak çalışma zamanında örtük olarak uygulanır.

Yani bu:

ZonedDateTime.now()

… Bununla aynıdır:

ZonedDateTime.now( ZoneId.systemDefault() )

İstediğiniz / beklenen saat diliminizi geçerek açık olmak daha iyi. Varsayılan çalışma zamanı sırasında herhangi bir anda değişebilir .

Önemliyse, saat dilimini kullanıcıyla doğrulayın.

Saat dakika

ZonedDateTimeSaat ve dakika için sorgulayın .

int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;

LocalTime

Saat dilimi olmadan sadece günün saatini istiyorsanız, ayıklayın LocalTime.

LocalTime lt = zdt.toLocalTime() ;

Veya ZonedDateTimedoğrudan atlayarak tamamen atlayın 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).

java.time türleri

Modern java.time'a karşı tarih-saat sınıflarının çeşitleri mirasa karşı tablosu.


Hakkında java.time

Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date, Calendar& SimpleDateFormat.

Daha fazla bilgi için Oracle Eğiticisine bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .

Artık bakım modunda olan Joda-Time projesi java.time sınıflarına geçişi tavsiye ediyor .

Sen değiştirebilir java.time sizin veritabanı ile doğrudan nesneleri. JDBC 4.2 veya sonraki bir sürümüyle uyumlu bir JDBC sürücüsü kullanın . Dizeye gerek yok, sınıflara gerek yok .java.sql.*

Java.time sınıflarını nereden edinebilirsiniz?

ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için bir kanıt zeminidir. Burada bazı yararlı sınıfları gibi bulabilir Interval, YearWeek, YearQuarter, ve daha .



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

Bu işlevler int değerlerini saat ve dakika olarak döndürür.


1
Çiftleme. Bu yaklaşım JD'nin Yanıtında zaten ele alınmıştır .
Basil Bourque

Öyle java.sql.Timemi? Kesinlikle bu modası geçmiş sınıfı, oyuna sokmak için hiçbir sebep yok java.time.LocalTime. Aşırı karmaşık oluyorsun.
Ole VV

Görünen getMinutes()o ki (java 1.8 kullanıyorum) ve yerineCalendar.get(Calendar.MINUTE)
Saltz3

3

Dakikalar ve saatler almanın başka bir yolu da SimpleDateFormat kullanmaktır.

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

SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())

Bilginize gibi korkunç zahmetli tarih-saat sınıfları java.util.Date, java.util.Calendarve java.text.SimpleDateFormatşimdi mirası supplanted, java.time sonra Java 8 ve yerleşik sınıflara. Oracle'ın Öğreticisine bakın .
Basil Bourque

2

Reklam joda zaman görünümlü öneriyoruz. http://www.joda.org/joda-time/

Kalın projeme başka bir kütüphane eklemekten korkuyordum, ama sadece kolay, hızlı ve akıllı ve harika. Ayrıca, mevcut kodla bir dereceye kadar güzel oynuyor.


1

Bunu tavsiye etmese de, java.util.Date'de birçok yöntem kullanımdan kaldırılmış olsa da, hala çalıştıklarını belirtmeye değer olduğunu düşünüyorum. Önemsiz durumlarda, bunları kullanmak uygun olabilir. Ayrıca, java.util.Calendar oldukça yavaştır, bu nedenle getMonth ve getYear on Date çok daha hızlı olabilir.


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

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

Bu benim için çalışıyor


0

import java.util.*Takvim ve biçimlendirici sınıfını kullanarak saat ve dakika alabilirsiniz. Calendar cal = Calendar.getInstance()ve Formatter fmt=new Formatter()görüntüleme saati ve dakikası için bir format ayarlayın fmt.format("%tl:%M",cal,cal)ve System.out.println(fmt) çıktı çıktıları şunun gibi10:12

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.