1. Date
sınıf ve Unix zamanı
Java'nın en başından beri, dilin zaman ve tarihlerle çalışmak için özel bir sınıfı vardır — Date
. Zamanla, tarihlerle çalışmak için birkaç sınıf daha ortaya çıktı, ancak programcılar Date
bugün bile sınıfı kullanmaya devam ediyor.
Bunun nedeni çok basit ve kullanışlı olmasıdır. Ve bir programcı olarak, onunla herhangi bir gerçek projede kesinlikle karşılaşacaksınız. Kullanıp kullanmamak sizin seçiminiz, ancak bunu bilmelisiniz. Bu yüzden ona değerli zamanınızdan birkaç dakika ayırın.
Sınıfı bu kadar iyi yapan nedir Date
? Sadeliği.
Sınıf , tarih ve saat bilgilerini 1 Ocak 1970'ten bu yana geçen milisaniye sayısıDate
olarak depolar. Bu çok fazla milisaniyedir, bu nedenle tür bunları depolamak için kullanılır.long
Neden özellikle 1970'den beri? Bu sözde Unix zamanı : tüm modern işletim sistemlerinin atası olan Unix işletim sistemi zamanı bu şekilde tutar.
Ancak iki tarih arasında ne kadar zaman geçtiğini çok kolay bir şekilde öğrenebilirsiniz: bir tarihi diğerinden çıkarın ve tarihler arasındaki en yakın milisaniyeye kadar olan zaman farkını elde edin.
İşte sınıfla çalışmanın bazı yararlı örnekleri Date
.
2. Geçerli tarihi alma
Geçerli saati ve tarihi almak için bir Date
nesne oluşturmanız yeterlidir. Her yeni nesne, oluşturulduğu zamanı saklar. Çok basit görünüyor:
Date current = new Date();
Bu komutu yürüttükten sonra current
değişken, oluşturulan Date
nesneye, oluşturulma zamanını (1 Ocak 1970'ten bu yana geçen milisaniye sayısı) dahili olarak depolayacak bir referans depolayacaktır.
Geçerli tarihin ekranda görüntülenmesi
Geçerli tarihi görüntülemek için basitçe: a) yeni bir Date
nesne oluşturun, b) yöntemi kullanarak ekrana yazdırın System.out.println()
.
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
İşte konsol çıktısının anlamı:
Metin | Tercüme |
---|---|
perşembe _ | Perşembe |
21 Şubat | 21 Şubat |
14:01:34 | saat : dakika : saniye |
Doğu Avrupa Zaman Dilimi | Saat dilimi: Doğu Avrupa Saati |
2019 | Yıl |
3. Belirli bir tarih belirlemek
Date
Şimdiki zamanı nasıl alacağımızı bulduk, ancak farklı bir tarih veya saat saklayan bir nesneyi nasıl yaratırız ?
Yine, burada her şey basit. Belirli bir tarih belirlemek için aşağıdaki gibi bir kod yazmanız gerekir:
Date birthday = new Date(year, month, day);
Her şey basit ve açık, ancak dikkat edilmesi gereken iki nüans var:
- Yıl 1900'den sayılmalıdır.
- Aylar sıfırdan numaralandırılmıştır.
Bu, Unix işletim sisteminin bir başka mirasıdır: Unix'te programcılar yılı iki basamak kullanarak belirtirdi. 1977 yerine basitçe 77 yazdılar. Yani 1900'den itibaren sayarsak doğru yıl 77'dir.
Mesela ben 21 Mart 1989'da doğdum. Mart üçüncü aydır, bu yüzden şunu yazmam gerekiyor:
kod | Konsol çıkışı |
---|---|
|
|
Aylar sıfırdan numaralandırılmış ama günler değil Bu biraz garip değil mi?
Gerçek programcıların galip gelmesi ve ayın günlerini de sıfırdan numaralandırması gerektiğini düşünüyoruz. Ah bu konformistler 🙂
Belirli bir zaman ayarlama
Belirli bir zaman belirlemek de oldukça basittir: bunun için şöyle bir ifade yazmanız gerekir:
Date birthday = new Date(year, month, day, hour, minutes, seconds);
Saatler, dakikalar ve saniyeler sıfırdan numaralandırılmıştır: bırakın içinizdeki programcı rahat bir nefes alsın.
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
Saati 12:15 ve tarihi 4 Haziran 2005 olarak ayarladık . Bunu programcı olmayan birinin okuması biraz zor ama olması gerektiği gibi çalışıyor.
4. Bir tarihin öğeleriyle çalışma
Date
Bir nesneyle onu görüntülemekten daha fazlasını yapabilirsiniz . Dahili olarak saklanan tarihin ayrı öğelerini almanıza izin veren yöntemleri vardır :
Yöntem | Tanım |
---|---|
|
Tarihin yılını 1900'e göre döndürür. |
|
Tarihin ayını döndürür (aylar sıfırdan numaralandırılmıştır) |
|
Ayın gününü döndürür |
|
Haftanın gününü döndürür |
|
Saatleri döndürür |
|
dakikaları döndürür |
|
Saniyeleri döndürür |
Örnek:
kod | Konsol çıkışı | Not |
---|---|---|
|
|
2005 Haziran Cumartesi ayın günü |
Bu arada, bir Date
nesne yalnızca bir tarihin tek tek öğelerini almanıza değil, aynı zamanda bunları değiştirmenize de izin verir:
Yöntem | Tanım |
---|---|
void setYear(int year) |
Tarihin yılını değiştirir. Yıl 1900'e göre belirtilir. |
void setMonth(int month) |
Tarihin ayını değiştirir (aylar sıfırdan numaralandırılmıştır) |
void setDate(int date) |
Ayın gününü değiştirir |
void setHours(int hours) |
Saatleri değiştirir |
void setMinutes(int minutes) |
Dakikaları değiştirir |
void setSeconds(int seconds) |
Saniyeleri değiştirir |
5. Milisaniye
Daha önce de söylediğimiz gibi, Date
nesne 1 Ocak 1970'ten bu yana geçen milisaniye sayısını saklar.
Bu sayıya ihtiyacımız olursa, nesneden alabiliriz Date
:
long time = date.getTime();
Yöntem , nesnenin getTime()
içinde saklanan milisaniye sayısını döndürür Date
.
Yalnızca milisaniye sayısını elde etmekle kalmaz, aynı zamanda mevcut bir nesnede bu sayıyı değiştirebilirsiniz:
Date date = new Date();
date.setTime(1117876500000L);
Date
Bu arada, nesneye yaratıldığı anda zaman geçirerek bunu daha da özlü bir şekilde yazabilirsiniz :
Date date = new Date(1117876500000L);
6. Tarihleri karşılaştırma
İki tarihi karşılaştırmak ve hangisinin önce geldiğini öğrenmek istiyorsanız, üç seçeneğiniz var.
İlk yol , her birinin sakladığı milisaniye sayısını basitçe karşılaştırmaktır:
if (date1.getTime() < date2.getTime())
İkinci yolbefore()
, bir nesnenin yöntemini kullanmaktır Date
:
if (date1.before(date2))
Şöyle okur: 'dan date1
önce gelirse date2
, o zaman...
Üçüncü yol,after()
bir nesnenin yöntemini kullanmaktır Date
:
if (date2.after(date1))
Şöyle okur: if date2
is after date1
, o zaman...
7. DateFormat
sınıf
Hatırlayın, tarihi ekranda gösterdiğimizde şöyle bir şey gördük: Thu Feb 21 14:01:34 EET 2019
. Her şey doğru görünüyor, ancak format, normal insanlardan ziyade programcılar için bir tarihin nasıl gösterileceğidir. Kullanıcılar için tarihi daha net göstermek istiyoruz. gibi bir şey Tuesday, February 21
.
Ve yıl olmadan. Veya gerekirse bir yıl ile. Genel olarak, tarihi farklı şekillerde gösterebilmek istiyoruz.
Bunun için özel bir sınıf var: SimpleDateFormat
.
Örnek:
kod |
---|
|
Konsol çıkışı |
|
Programın ne gösterdiğine bakın: Jun-04-2005
. Eskiden böyle değildi.
Aradaki fark, nesnenin kendisini değil, bir nesne üzerinde yöntemi Date
çağırarak elde edilen özel bir diziyi görüntülememizdir . Ama buradaki asıl mesele bu bile değil.format()
SimpleDateFormat
Nesne oluşturulduğunda, dizeyi parametre olarak SimpleDateFormat
ilettik . "MMM-dd-YYYY"
En sonunda konsol çıktısında gördüğümüz tarih biçimini ileten bu dizedir.
- MMM, üç harf kullanılarak kısaltılmış olarak ayın adını görüntülemeyi belirtir
- dd ayın gününü görüntülemeyi belirtir
- YYYY, yılı dört basamak kullanarak görüntülemeyi belirtir
Ayın çıktısını sayı olarak almak istiyorsak, yerine , kalıbı veren MMM
yazmamız gerekir . Ekran çıkışı olacakMM
"MM-dd-YYYY"
06-04-2005
Bu sınıfı daha sonra daha ayrıntılı olarak tartışacağız.
8. Date.parse
yöntem
Sınıf Date
ilginç ve faydalı başka bir şey yapabilir — bir diziden tarih alabilir. Veya programcıların dediği gibi, bir diziyi çözümleyebilir.
parse()
Bunun için özel bir yöntemi vardır . Ayrıştırma şöyle görünür:
Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );
Bu arada, bu kod daha kompakt bir şekilde yazılabilir:
Date date = new Date("Jul 06 12:15:00 2019");
Dizelerin ayrıştırılmasını diğer derslerde daha ayrıntılı olarak ele alacağız .