382 Stimmen

Ganzzahliger Wert des aktuellen Jahres in Java abrufen

Ich muss das aktuelle Jahr in Java als Ganzzahl bestimmen. Ich könnte einfach verwenden java.util.Date() aber sie ist veraltet.

798voto

cagcowboy Punkte 28493
int year = Calendar.getInstance().get(Calendar.YEAR);

Sie sind sich nicht sicher, ob dies das Kriterium erfüllt, keinen neuen Kalender einzurichten? (Warum der Widerstand dagegen?)

188voto

assylias Punkte 308529

Wenn Sie die Zeit-API von Java 8 verwenden (vorausgesetzt, Sie sind damit einverstanden, das Jahr in der Standardzeitzone Ihres Systems zu erhalten), können Sie Folgendes verwenden Year::now Methode :

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

29voto

toolkit Punkte 48653

Dies ist am einfachsten (unter Verwendung des Kalenders, sorry):

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

Außerdem gibt es die neue Datum und Uhrzeit API JSR sowie Joda Zeit

18voto

Zhurov Konstantin Punkte 682

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

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

16voto

Basil Bourque Punkte 256611

Tl;dr

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

Zeitzone

Die Antwort por Raffi Khatchadourian zeigt klugerweise, wie man das neue java.time-Paket in Java 8. Aber diese Antwort geht nicht auf die kritische Frage 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 Standardzeitzone wird verwendet, um das heutige Datum zu bestimmen. Denken Sie zum Beispiel daran, dass im Moment nach Mitternacht in Paris das Datum in Montréal immer noch "gestern" ist.

Ihre Ergebnisse können also davon abhängen, auf welchem Rechner es läuft, ob ein Benutzer/Administrator die Zeitzone des Host-Betriebssystems ändert oder ob Java-Code verwendet wird. in jedem Augenblick den aktuellen Standard der JVM zu ändern. Besser ist es, die Zeitzone anzugeben.

Übrigens, verwenden Sie immer richtige Namen für Zeitzonen como von der IANA definiert . Verwenden Sie niemals die Codes mit 3-4 Buchstaben, die weder genormt noch eindeutig sind.

java.time

Beispiel in java.time von Java 8.

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

Joda-Time

Eine Idee wie oben, aber unter Verwendung der Joda-Time 2.7 Bibliothek.

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

Erhöhend/vermindernd Jahr

Wenn Ihr Ziel darin besteht, ein Jahr auf einmal zu überspringen, brauchen Sie die Jahreszahl nicht zu extrahieren. Sowohl Joda-Time als auch java.time haben Methoden zum Addieren/Subtrahieren von Jahreszahlen auf einmal. Und diese Methoden sind intelligent, sie behandeln 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 ) ;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X