1. Преминаване от Date
клас в Calendar
клас
Програмистите харесаха Date
класа заради неговата простота и поддръжка на Unix стандартите, но Howто знаете, всяка роза има своите бодли.
Програмистите искаха "умен" Date
клас. И те получиха това, което искаха под формата на Calendar
класа. Той е замислен като начин не само да съхранява дати, но и да извършва трудни операции с дати.
Пълното име на Calendar
класа е java.util.Calendar. Не забравяйте да го добавите към оператор за импортиране, ако решите да го използвате във вашия code.
Можете да създадете Calendar
обект с тази команда:
Calendar date = Calendar.getInstance();
Статичният getInstance()
метод на Calendar
класа създава Calendar
обект, инициализиран с текущата дата. Желаният от вас календар ще бъде създаден въз основа на настройките на компютъра, на който се изпълнява програмата.
Или по-точно, календарът, който получавате... Това е така, защото хората на Земята не са ограничени до един календар. Вместо това те използват много. И почти всеки от тях е свързан с няHowва религия or държава. Класът Calendar
поддържа 3 от тях:
Календар | Описание |
---|---|
Грегориански календар | Християнски григориански календар |
будистки календар | будистки календар |
Японски имперски календар | Японски императорски календар |
Но има и китайски и арабски календари. По принцип работата с времето не е толкова лесна, колкото изглежда.
В китайския календар годината официално е 4716 към момента на писане на този урок. А според мюсюлманския календар годината е 1398. Добре дошъл в големия свят, приятелю програмист.
2. Създаване на календарен обект
Ще използваме григорианския календар, тъй като той е най-разпространеният в света. Поне докато Китай купи Oracle и не направи китайския календар основен.
Можете да създадете календарен обект с произволна дата, като използвате израз като този:
Calendar date = new GregorianCalendar(year, month, day);
Да, трябва да пишете GregorianCalendar
всеки път. Вместо Calendar
, можете също да пишете GregorianCalendar
- това също ще работи. Но самото писане Calendar
е по-кратко.
Годината трябва да бъде написана изцяло, например не можете да напишете 19 instead of 2019. Месеците все още се номерират от нула. Но Howто преди, дните в месеца не се номерират от нула. маниаци!
За да зададете часа, Howто и датата, трябва да подадете времето като допълнителни аргументи:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Можете дори да преминете за мorсекунди, ако е необходимо. Те са параметърът след броя секунди.
3. Показване на календарен обект на екрана
Ако просто отпечатате календарен обект на екрана, няма да сте много доволни от резултата.
Код |
---|
|
Конзолен изход |
|
Нещото, което трябва да имате предвид тук е, че календарът е календар, а не дата : той има всяHowви настройки, които ще се показват на екрана.
Би било правилно да използвате SimpleDateFormat
обект за показване на календар, но докато не го проучим, можете да използвате този лайфхак.
Date date = calendar.getTime();
Един Calendar
обект може лесно да бъде преобразуван в Date
обект и вие вече знаете How да показвате Date
обект. Можете да използвате code като този, за да конвертирате Calendar
обект в Date
:
Използване на getTime()
метода:
Код | Конзолен изход |
---|---|
|
|
Това е съвсем различен въпрос, нали?
4. Работа с елементи на дата
За да получите конкретен елемент от дата (например година, месец, ...), класът Calendar
има get()
метода. Това е един метод, но има параметри:
int month = calendar.get(Calendar.MONTH);
Където calendar
е Calendar
променлива, а MONTH
е константно поле на Calendar
класа.
Подавате едно от Calendar
константните полета на класа като аргумент на get
метода и получавате желаната стойност като резултат.
Примери
Код | Описание |
---|---|
|
ера (преди or след общата ера) година месец ден от месеца ден от седмицата часове minutesи секунди |
За да промените елемент от дата, използвайте set
метода:
calendar.set(Calendar.MONTH, value);
Където calendar
е Calendar
променлива, а MONTH
е константно поле на Calendar
класа.
Когато работите с set
метод, предавате едно от Calendar
постоянните полета на класа като първи аргумент и новата стойност като втори аргумент.
Примери
Код | Описание |
---|---|
|
година = 2019 месец = юли (номериран от 0) 4-ти ден часове minutesи секунди |
5. Константи на Calendar
класа
Константните полета на Calendar
класа не се ограничават до тези за именуване на елементи от дата. Изглежда, че има полета за всеки повод.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Например има постоянни полета за позоваване на месеци:
А също и дните от седмицата:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Няма да изброяваме всичко. Просто не искаме да бъдете изненадани, ако видите константи като тази в codeа.
Използването на константи прави codeа по-четлив, поради което програмистите ги използват. Месеците също са номерирани от нула, за да се подобри четливостта. Или не.
6. Смяна на дата в Calendar
обект
Класът Calendar
има метод, който ви позволява да оперирате с дата по по-интелигентни начини. Например, можете да добавите година, месец or няколко дни към дата. Или ги махнете. Този метод се нарича add()
. Работата с него изглежда така:
calendar.add(Calendar.MONTH, value);
Където calendar
е Calendar
променлива, а MONTH
е константно поле на Calendar
класа.
Когато работите с add
метод, вие предавате едно от Calendar
константните полета на класа като първи аргумент, а като втори аргумент — новата стойност, която трябва да бъде добавена.
Това е друг интелигентен метод. Да видим колко е умен:
Код |
---|
|
Конзолен изход |
|
Този метод разбира, че има само 28 дни през февруари 2019 г., така че получената дата е 1 март.
Сега да вземем 2 месеца! Какво трябва да получим? 27 декември 2018 г.! Да проверим сега.
За да извършите операция, която води до по-ранна дата, трябва да подадете отрицателна стойност към add()
метода:
Код |
---|
|
Конзолен изход |
|
Работи!
Този метод отчита различната продължителност на месеците, Howто и високосните години. Като цяло страхотен метод. Това е точно това, от което се нуждаят повечето програмисти, които работят с дати.
7. Подвижни елементи на дата
Но понякога има ситуации, когато не искаме това умно поведение, например искате да направите нещо за една част от датата, без да променяте всичко останало.
Класът Calendar
има специален roll()
метод за това. Неговият подпис е точно като add()
метода, но този метод променя само един елемент от датата, оставяйки останалите непроменени.
Пример:
Код |
---|
|
Конзолен изход |
|
Променихме месеца, но годината и датата останаха непроменени.
GO TO FULL VERSION