1. Växla från Date
klassen till Calendar
klassen
Programmerare älskade Date
klassen för dess enkelhet och stöd för Unix-standarder, men som ni vet har varje ros sina törnen.
Programmerare ville ha en "smart" Date
klass. Och de fick som de ville i form av Calendar
klassen. Det var tänkt som ett sätt att inte bara lagra datum, utan också att utföra svåra operationer med datum.
Klassens fullständiga namn Calendar
är java.util.Calendar. Glöm inte att lägga till den i en importsats om du bestämmer dig för att använda den i din kod.
Du kan skapa ett Calendar
objekt med detta kommando:
Calendar date = Calendar.getInstance();
Klassens statiska getInstance()
metod Calendar
skapar ett Calendar
objekt initierat med det aktuella datumet. Kalendern du vill skapa kommer att skapas baserat på inställningarna på datorn som kör programmet.
Eller rättare sagt, kalendern du får... Det beror på att människor på jorden inte är begränsade till en enda kalender. Istället använder de många. Och nästan alla är förknippade med någon religion eller ett land. Klassen Calendar
stödjer 3 av dem:
Kalender | Beskrivning |
---|---|
Gregorianska kalendern | Kristen gregoriansk kalender |
Buddhistisk kalender | Buddhistisk kalender |
JapaneseImperialCalendar | Japanska kejserliga kalendern |
Men det finns också kinesiska och arabiska kalendrar. I grund och botten är det inte så lätt att arbeta med tid som det verkar.
I den kinesiska kalendern är året officiellt 4716 vid tidpunkten för skrivningen av denna lektion. Och enligt den muslimska kalendern är året 1398. Välkommen till den stora världen, min programmerare vän.
2. Skapa ett kalenderobjekt
Vi kommer att använda den gregorianska kalendern, eftersom den är den vanligaste i världen. Åtminstone tills Kina köper Oracle och gör den kinesiska kalendern till den viktigaste.
Du kan skapa ett kalenderobjekt med vilket datum som helst med ett uttalande så här:
Calendar date = new GregorianCalendar(year, month, day);
Ja, man måste skriva GregorianCalendar
varje gång. Istället för Calendar
kan du också skriva GregorianCalendar
- det kommer också att fungera. Men att skriva Calendar
är bara kortare.
Årtalet måste skrivas i sin helhet, t.ex. kan du inte skriva 19 istället för 2019. Månader är fortfarande numrerade från noll. Men som tidigare är månadens dagar inte numrerade från noll. Nördar!
För att ställa in tid och datum måste du skicka in tiden som ytterligare argument:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Du kan till och med passera på millisekunder om det behövs. De är parametern efter antalet sekunder.
3. Visar ett kalenderobjekt på skärmen
Om du bara skriver ut ett kalenderobjekt på skärmen blir du inte särskilt nöjd med resultatet.
Koda |
---|
|
Konsolutgång |
|
Saken att tänka på här är att en kalender är en kalender, inte ett datum : den har alla typer av inställningar som alla kommer att visas på skärmen.
Det skulle vara lämpligt att använda ett SimpleDateFormat
objekt för att visa en kalender, men tills vi studerar det kan du använda detta life hack.
Date date = calendar.getTime();
Ett Calendar
objekt kan enkelt konverteras till ett Date
objekt, och du vet redan hur man visar ett Date
objekt. Du kan använda kod så här för att konvertera ett Calendar
objekt till en Date
:
Genom att använda getTime()
metoden:
Koda | Konsolutgång |
---|---|
|
|
Det är en helt annan sak, eller hur?
4. Arbeta med delar av ett datum
För att få ett specifikt element av ett datum (t.ex. år, månad, ...) Calendar
har klassen get()
metoden. Det är en enda metod, men den har parametrar:
int month = calendar.get(Calendar.MONTH);
Var calendar
är en Calendar
variabel och MONTH
är ett konstant fält i Calendar
klassen.
Du skickar ett av Calendar
klassens konstantfält som argument till get
metoden, och du får det önskade värdet som resultat.
Exempel
Koda | Beskrivning |
---|---|
|
era (före eller efter den vanliga eran) år månad dag i månaden veckodag timmar minuter sekunder |
För att ändra ett element i ett datum, använd set
metoden:
calendar.set(Calendar.MONTH, value);
Var calendar
är en Calendar
variabel och MONTH
är ett konstant fält i Calendar
klassen.
När du arbetar med set
metod skickar du ett av Calendar
klassens konstantfält som första argument och det nya värdet som andra argument.
Exempel
Koda | Beskrivning |
---|---|
|
år = 2019 månad = juli (numrerad från 0) 4:e dagen timmar minuter sekunder |
Calendar
5. Klassens konstanter
Klassens konstanta fält Calendar
är inte begränsade till de för att namnge element i ett datum. Det verkar finnas fält för alla tillfällen.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Till exempel finns det konstanta fält att referera till månader:
Och även veckodagarna:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Vi kommer inte att lista allt. Vi vill bara inte att du ska bli förvånad om du ser konstanter som denna i koden.
Att använda konstanter gör koden mer läsbar, vilket är anledningen till att programmerarna använder dem. Och månader är numrerade från noll också för att förbättra läsbarheten. Eller inte.
6. Ändra datum i ett Calendar
objekt
Klassen Calendar
har en metod som låter dig arbeta på en dejt på mer intelligenta sätt. Du kan till exempel lägga till ett år, en månad eller flera dagar till ett datum. Eller ta bort dem. Denna metod kallas add()
. Att arbeta med det ser ut så här:
calendar.add(Calendar.MONTH, value);
Var calendar
är en Calendar
variabel och MONTH
är ett konstant fält i Calendar
klassen.
När du arbetar med add
metod skickar du ett av Calendar
klassens konstantfält som det första argumentet och som det andra argumentet – det nya värdet som ska läggas till.
Detta är en annan intelligent metod. Låt oss se hur smart det är:
Koda |
---|
|
Konsolutgång |
|
Den här metoden förstår att det bara finns 28 dagar i februari 2019, så det resulterande datumet är 1 mars.
Nu tar vi bort 2 månader! Vad ska vi få? 27 december 2018! Låt oss kolla nu.
För att utföra en operation som resulterar i ett tidigare datum måste du skicka ett negativt värde till metoden add()
:
Koda |
---|
|
Konsolutgång |
|
Det fungerar!
Denna metod tar hänsyn till olika längder på månader såväl som skottår. Allt som allt en jättebra metod. Det är precis vad de flesta programmerare som jobbar med datum behöver.
7. Rullande delar av ett datum
Men ibland finns det situationer då vi inte vill ha det här smarta beteendet, t.ex. att du vill göra något med en del av dejten utan att ändra allt annat.
Klassen Calendar
har den speciella roll()
metoden för detta. Dess signatur är precis som add()
metoden, men den här metoden ändrar bara en del av datumet och lämnar resten oförändrad.
Exempel:
Koda |
---|
|
Konsolutgång |
|
Vi ändrade månaden, men år och datum förblev oförändrade.