1. Sınıftan sınıfa Date
geçişCalendar
Date
Programcılar , sınıfı sadeliği ve Unix standartlarını desteklemesi nedeniyle sevdiler , ancak bildiğiniz gibi her gülün dikenleri vardır.
Programcılar "akıllı" bir Date
sınıf istediler. Ve sınıf şeklinde istediklerini aldılar Calendar
. Yalnızca tarihleri depolamanın değil, aynı zamanda tarihlerle zor işlemleri gerçekleştirmenin bir yolu olarak tasarlandı.
Sınıfın tam adı Calendar
java.util.Calendar'dır. Kodunuzda kullanmaya karar verirseniz, onu bir import ifadesine eklemeyi unutmayın.
Calendar
Bu komutla bir nesne oluşturabilirsiniz :
Calendar date = Calendar.getInstance();
getInstance()
Sınıfın statik yöntemi , geçerli tarihle başlatılan Calendar
bir nesne oluşturur . Calendar
İstediğiniz takvim, programı çalıştıran bilgisayarın ayarlarına göre oluşturulacaktır.
Daha doğrusu elinize geçen takvim... Çünkü Dünya'daki insanlar tek bir takvimle sınırlı değil. Bunun yerine, çok kullanırlar. Ve neredeyse her biri bir din veya ülke ile ilişkilidir. Sınıf Calendar
bunlardan 3 tanesini destekler:
Takvim | Tanım |
---|---|
Miladi takvim | Hıristiyan Gregoryen takvimi |
BudistTakvim | Budist takvimi |
Japon İmparatorluk Takvimi | Japon imparatorluk takvimi |
Ama bir de Çin ve Arap takvimleri var. Temel olarak, zamanla çalışmak göründüğü kadar kolay değildir.
Çin takviminde, bu dersin yazıldığı sırada yıl resmi olarak 4716'dır. Ve hicri takvime göre yıl 1398. Koca dünyaya hoş geldin programcı arkadaşım.
2. Takvim nesnesi oluşturma
Dünyada en yaygın takvim olduğu için Gregoryen takvimini kullanacağız. En azından Çin Oracle'ı satın alıp Çin takvimini ana takvim yapana kadar.
Bunun gibi bir ifade kullanarak herhangi bir tarihe sahip bir takvim nesnesi oluşturabilirsiniz:
Calendar date = new GregorianCalendar(year, month, day);
GregorianCalendar
Evet, her seferinde yazmak zorundasın . yerine Calendar
yazabilirsiniz GregorianCalendar
- bu da işe yarayacaktır. Ancak yazmak Calendar
daha kısadır.
Yıl tam olarak yazılmalıdır, örneğin 2019 yerine 19 yazamazsınız. Aylar hala sıfırdan numaralandırılmıştır. Ancak daha önce olduğu gibi, ayın günleri sıfırdan numaralandırılmaz. İnekler!
Tarihin yanı sıra saati de ayarlamak için, zamanı ek argümanlar olarak iletmeniz gerekir:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Gerekirse milisaniye cinsinden bile geçebilirsiniz. Saniye sayısından sonraki parametredir.
3. Ekranda bir takvim nesnesi görüntüleme
Ekrana bir takvim nesnesi yazdırırsanız, sonuçtan pek memnun kalmazsınız.
kod |
---|
|
Konsol çıkışı |
|
Burada akılda tutulması gereken şey, bir takvimin bir tarih değil, bir takvim olduğudur : ekranda görüntülenecek her türlü ayara sahiptir.
Bir takvimi görüntülemek için bir nesne kullanmak uygun olur SimpleDateFormat
, ancak biz onu inceleyene kadar bu cankurtaran tüyosunu kullanabilirsiniz.
Date date = calendar.getTime();
Bir Calendar
nesne kolaylıkla bir nesneye dönüştürülebilir Date
ve siz zaten bir nesneyi nasıl görüntüleyeceğinizi biliyorsunuz Date
. Calendar
Bir nesneyi şuna dönüştürmek için bunun gibi bir kod kullanabilirsiniz Date
:
Yöntemi kullanarak getTime()
:
kod | Konsol çıkışı |
---|---|
|
|
Bu çok farklı bir konu, değil mi?
4. Bir tarihin öğeleriyle çalışma
Bir tarihin belirli bir öğesini (örneğin yıl, ay, ...) elde etmek için sınıfın yöntemi Calendar
vardır get()
. Bu tek bir yöntemdir, ancak parametreleri vardır:
int month = calendar.get(Calendar.MONTH);
Nerede calendar
bir Calendar
değişkendir ve MONTH
sınıfın sabit bir alanıdır Calendar
.
Calendar
Sınıfın sabit alanlarından birini yönteme argüman olarak iletirsiniz get
ve sonuç olarak istenen değeri alırsınız.
örnekler
kod | Tanım |
---|---|
|
çağ (ortak çağdan önce veya sonra) yıl ay ayın günü haftanın günü saat dakika saniye |
Bir tarihin bir öğesini değiştirmek için şu set
yöntemi kullanın:
calendar.set(Calendar.MONTH, value);
Nerede calendar
bir Calendar
değişkendir ve MONTH
sınıfın sabit bir alanıdır Calendar
.
Yöntemle çalışırken , sınıfın sabit alanlarından birini birinci bağımsız değişken olarak ve yeni değeri ikinci bağımsız değişken olarak set
iletirsiniz .Calendar
örnekler
kod | Tanım |
---|---|
|
yıl = 2019 ay = Temmuz (0'dan numaralandırılmıştır) 4. gün saat dakika saniye |
5. Sınıfın Calendar
sabitleri
Sınıfın sabit alanları, Calendar
bir tarihin öğelerini adlandırmak için olanlarla sınırlı değildir. Her durum için alanlar var gibi görünüyor.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Örneğin, aylara atıfta bulunmak için sabit alanlar vardır:
Ve ayrıca haftanın günleri:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Her şeyi listelemeyeceğiz. Kodda bunun gibi sabitler görürseniz şaşırmanızı istemiyoruz.
Sabitleri kullanmak, kodu daha okunabilir hale getirir, bu nedenle programcılar bunları kullanır. Okunabilirliği artırmak için aylar da sıfırdan numaralandırılmıştır. Ya da değil.
Calendar
6. Bir nesnedeki tarihi değiştirme
Sınıfın, Calendar
bir tarihte daha akıllı şekillerde işlem yapmanızı sağlayan bir yöntemi vardır. Örneğin, bir tarihe yıl, ay veya birkaç gün ekleyebilirsiniz. Ya da onları uzaklaştırın. Bu yöntem denir add()
. Bununla çalışmak şöyle görünür:
calendar.add(Calendar.MONTH, value);
Nerede calendar
bir Calendar
değişkendir ve MONTH
sınıfın sabit bir alanıdır Calendar
.
Yöntemle çalışırken , sınıfın sabit alanlarından birini birinci bağımsız değişken olarak ve ikinci bağımsız değişken olarak eklenecek yeni değeri add
iletirsiniz .Calendar
Bu başka bir akıllı yöntemdir. Ne kadar akıllı olduğunu görelim:
kod |
---|
|
Konsol çıkışı |
|
Bu yöntem, Şubat 2019'da yalnızca 28 gün olduğunu anlar, bu nedenle sonuç tarihi 1 Mart'tır.
Şimdi 2 ayı ayıralım! Ne almalıyız? 27 Aralık 2018! Şimdi kontrol edelim.
Daha erken bir tarihle sonuçlanan bir işlem gerçekleştirmek için, yönteme negatif bir değer iletmeniz gerekir add()
:
kod |
---|
|
Konsol çıkışı |
|
İşe yarıyor!
Bu yöntem, artık yılların yanı sıra farklı ay uzunluklarını da hesaba katar. Sonuç olarak, harika bir yöntem. Tarihlerle çalışan çoğu programcının tam olarak ihtiyaç duyduğu şey budur.
7. Bir tarihin yuvarlanan öğeleri
Ancak bazen bu akıllıca davranışı istemediğimiz durumlar olabilir, örneğin, diğer her şeyi değiştirmeden tarihin bir bölümünde bir şeyler yapmak istiyorsunuz.
Sınıfın bunun için Calendar
özel bir yöntemi var . roll()
İmzası tıpkı yöntem gibidir add()
, ancak bu yöntem tarihin yalnızca bir öğesini değiştirir, geri kalanını değiştirmez.
Örnek:
kod |
---|
|
Konsol çıkışı |
|
Ayı değiştirdik ama yıl ve tarih değişmedi.