Holen Sie sich den ganzzahligen Wert des aktuellen Jahres in Java

Lesezeit: 6 Minuten

Holen Sie sich den ganzzahligen Wert des aktuellen Jahres in
karlgrz

Ich muss das aktuelle Jahr in Java als ganze Zahl bestimmen. ich könnte es einfach gebrauchen java.util.Date(), aber es ist veraltet.

  • Nein, java.util.Date ist nicht veraltet, nicht mehr ab Java 8. Einige seiner Methoden sind veraltet, aber nicht die gesamte Klasse. Aber beides sollte man vermeiden java.util.Date und java.util.Calendar da sie notorisch lästig, verwirrend und fehlerhaft sind. Verwenden Sie stattdessen entweder java.time (in Java 8) oder Joda-Zeit.

    – Basilikum Bourque

    3. Mai ’15 um 21:46


int year = Calendar.getInstance().get(Calendar.YEAR);

Sie sind sich nicht sicher, ob dies den Kriterien entspricht, keinen neuen Kalender einzurichten? (Warum der Widerstand dagegen?)

  • Wenn Sie Ihre Antwort sehen, ist der Kalender ein gutes Objekt. Ich war auf der Suche nach einem Einzeiler und dachte nicht, dass Calendar das für mich bieten würde. Bewiesen, dass ich falsch liege! Danke!

    – karlgrz

    25. September ’08 um 22:03

  • Was ist mit der Parallelität, was ist, wenn ein anderer Thread/ein anderer Bibliothekscode die aktuelle Zeit ändert? Wäre es nicht sinnvoll, es in etwa wie folgt zu ändern: Calendar c = Calendar.getInstance(); synchronisiert (c) {c.setTimeInMillis (System.currentTimeMillis()); return c.get(Calendar.YEAR);}

    – jnr

    5. Dezember ’12 um 10:19


  • Dies gibt in verschiedenen Android-Versionen einen anderen Wert zurück. Ich vergleiche Android v4.1.2 mit v4.2.1.

    – Etienne Lawlor

    6. Januar ’13 um 8:06

  • @ycnix Es gibt kein Parallelitätsproblem mit dem Code, daher muss er nicht komplizierter gemacht werden. Calendar.getInstance().get(Calendar.YEAR) ist atomar in Bezug darauf, dass die Uhr von außen geändert wird, und zwar synchronized(c) auf eine neue Instanz einer lokalen Variablen wäre hier ohnehin sehr sinnlos.

    – nein

    13. Mai ’14 um 12:46


  • import java.util.Calendar

    – Dominykas Mostauskis

    11. Mai ’15 um 11:51

Holen Sie sich den ganzzahligen Wert des aktuellen Jahres in
assylias

Wenn Sie die Zeit-API von Java 8 verwenden (vorausgesetzt, Sie möchten das Jahr in der Standardzeitzone Ihres Systems anzeigen), können Sie verwenden das Year::now Methode:

int year = Year.now().getValue();

  • Ich schlage vor, das optionale immer zu bestehen ZoneId Argument zu now anstatt sich implizit auf die aktuelle Standardzone der JVM zu verlassen (die sich während der Laufzeit jederzeit ändern kann!).

    – Basilikum Bourque

    23. Mai ’17 um 17:51

  • Das sieht übrigens so aus: int year = Year.now(ZoneId.of("America/New_York")).getValue(); docs.oracle.com/javase/8/docs/api/java/time/Year.html#now–

    – bcmoney

    21. Mai ’20 bei 7:34

Das einfachste (mit Kalender, sorry) ist:

 int year = Calendar.getInstance().get(Calendar.YEAR);

Es gibt auch das neue Datum und Uhrzeit API JSR, ebenso gut wie Joda-Zeit

  • Dies gibt in verschiedenen Android-Versionen einen anderen Wert zurück. Ich vergleiche Android v4.1.2 mit v4.2.1.

    – Etienne Lawlor

    6. Januar ’13 um 10:09

  • @toobsco42 – googeln Sie nach ‘android calendar.year bug’

    – Werkzeugkasten

    7. Januar ’13 um 16:54

  • Hey @toolkit, ich habe erfolglos recherchiert. Ich hatte auf eine konkretere Antwort gehofft.

    – Etienne Lawlor

    7. Januar ’13 um 17:20


  • Ich habe meine SIM-Karte mit 4.1.2 aus dem Telefon entfernt. Das Netzwerk war also nicht in der Lage, Datum und Uhrzeit auf dem Telefon zu aktualisieren. Folglich steckte das Telefon im Jahr 2012 fest. Dies scheint kein Fehler in 4.1.2 zu sein.

    – Etienne Lawlor

    9. Januar ’13 um 22:22

1641952006 532 Holen Sie sich den ganzzahligen Wert des aktuellen Jahres in
Schurow Konstantin

Sie können auch 2 Methoden verwenden von java.time.YearMonth( Seit Java 8 ):

import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();

Am einfachsten ist es, das Jahr aus dem Kalender zu erhalten.

// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);

  • Calendar.YEAR ist nicht das aktuelle Jahr.

    – Werkzeugkasten

    25. September ’08 um 22:00

  • Calendar.YEAR ist so definiert… public final static int YEAR = 1;

    – Cagcowboy

    25. September ’08 um 22:01

  • Die get()-API von Calendar ruft das Datum ab, das sich in dem durch die Konstante angegebenen Feld befindet. Die Jahreszahl befindet sich im 1er-Feld im Kalenderobjekt! Calendar.getInstance() ruft das aktuelle Datum ab. java.sun.com/j2se/1.4.2/docs/api/java/util/…

    – Bob King

    25. September ’08 um 22:08

  • Dies gibt in verschiedenen Android-Versionen einen anderen Wert zurück. Ich vergleiche Android v4.1.2 mit v4.2.1.

    – Etienne Lawlor

    6. Januar ’13 um 10:09

  • Ich habe meine SIM-Karte mit 4.1.2 aus dem Telefon entfernt. Das Netzwerk war also nicht in der Lage, Datum und Uhrzeit auf dem Telefon zu aktualisieren. Folglich steckte das Telefon im Jahr 2012 fest. Dies scheint kein Fehler in 4.1.2 zu sein.

    – Etienne Lawlor

    9. Januar ’13 um 22:21

tl;dr

ZonedDateTime.now(  ZoneId.of( "Africa/Casablanca" )  )
             .getYear()

Zeitzone

Die Antwort von Raffi Khatchadourian zeigt klugerweise, wie man das Neue nutzt java.time-Paket in Java 8. Diese Antwort geht jedoch nicht auf das kritische Problem der Zeitzone bei der Bestimmung eines Datums ein.

int year = LocalDate.now().getYear();

Dieser Code hängt von der aktuellen Standardzeitzone der JVM ab. Die Standardzone wird verwendet, um das heutige Datum zu bestimmen. Denken Sie zum Beispiel daran, dass das Datum in Montréal nach Mitternacht in Paris immer noch „gestern“ ist.

Ihre Ergebnisse können daher variieren, je nachdem, auf welchem ​​​​Computer sie ausgeführt werden, ein Benutzer/Administrator, der die Zeitzone des Host-Betriebssystems ändert, oder je nach Java-Code jeder Zeit Ändern der aktuellen Standardeinstellung der JVM. Geben Sie besser die Zeitzone an.

Verwenden Sie übrigens immer richtige Zeitzonennamen wie von der IANA definiert. Verwenden Sie niemals die 3-4-Buchstaben-Codes, die weder standardisiert noch eindeutig sind.

java.time

Beispiel in java.time von Java 8.

int year = ZonedDateTime.now(  ZoneId.of( "Africa/Casablanca" )  ).getYear() ;

Joda-Zeit

Eine Idee wie oben, aber mit der Joda-Zeit 2.7 Bibliothek.

int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;

Inkrementierendes/dekrementierendes Jahr

Wenn Sie ein Jahr nach dem anderen springen möchten, müssen Sie die Jahreszahl nicht extrahieren. Sowohl Joda-Time als auch java.time verfügen über Methoden zum Addieren/Subtrahieren eines Jahres. Und diese Methoden sind intelligent und handhaben Sommerzeit und andere Anomalien.

Beispiel in java.time.

ZonedDateTime zdt = 
    ZonedDateTime
    .now(  ZoneId.of( "Africa/Casablanca" )  )
    .minusYears( 1 ) 
;

Beispiel in Joda-Time 2.7.

DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;

  • Calendar.YEAR ist nicht das aktuelle Jahr.

    – Werkzeugkasten

    25. September ’08 um 22:00

  • Calendar.YEAR ist so definiert… public final static int YEAR = 1;

    – Cagcowboy

    25. September ’08 um 22:01

  • Die get()-API von Calendar ruft das Datum ab, das sich in dem durch die Konstante angegebenen Feld befindet. Die Jahreszahl befindet sich im 1er-Feld im Kalenderobjekt! Calendar.getInstance() ruft das aktuelle Datum ab. java.sun.com/j2se/1.4.2/docs/api/java/util/…

    – Bob King

    25. September ’08 um 22:08

  • Dies gibt in verschiedenen Android-Versionen einen anderen Wert zurück. Ich vergleiche Android v4.1.2 mit v4.2.1.

    – Etienne Lawlor

    6. Januar ’13 um 10:09

  • Ich habe meine SIM-Karte mit 4.1.2 aus dem Telefon entfernt. Das Netzwerk war also nicht in der Lage, Datum und Uhrzeit auf dem Telefon zu aktualisieren. Folglich steckte das Telefon im Jahr 2012 fest. Dies scheint kein Fehler in 4.1.2 zu sein.

    – Etienne Lawlor

    9. Januar ’13 um 22:21

1641952006 984 Holen Sie sich den ganzzahligen Wert des aktuellen Jahres in
basZero

Wenn Sie das Jahr eines Datumsobjekts möchten, habe ich die folgende Methode verwendet:

public static int getYearFromDate(Date date) {
    int result = -1;
    if (date != null) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        result = cal.get(Calendar.YEAR);
    }
    return result;
}

  • Ergebnis ist 1970!

    – Dr. andRO

    2. Juni ’18 um 19:08

.

406530cookie-checkHolen Sie sich den ganzzahligen Wert des aktuellen Jahres in Java

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy