it-swarm.com.de

Ermittelt den Integer-Wert des aktuellen Jahres in Java

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

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

Sind Sie sich nicht sicher, ob dies den Kriterien entspricht, keinen neuen Kalender einzurichten? (Warum die Opposition dagegen?)

576
cagcowboy

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

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

Das einfachste (mit Kalender, sorry) ist:

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

Es gibt auch das neue Datum und Uhrzeit API JSR sowie Joda Time

25
toolkit

Am einfachsten ist es, das Jahr aus dem Kalender abzurufen.

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

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();

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;
}
10
basZero

tl; dr

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

Zeitzone

Die Antwort von Raffi Khatchadourian zeigt klug, wie das neue Java.time-Paket in Java 8 verwendet wird. 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 zur Bestimmung des heutigen Datums verwendet. Denken Sie zum Beispiel daran, dass das Datum in Montréal nach Mitternacht in Paris immer noch „gestern“ ist.

Daher können Ihre Ergebnisse je nach Computer, auf dem er ausgeführt wird, einem Benutzer/Administrator, der die Zeitzone des Host-Betriebssystems ändert, oder einem beliebigen Java code zu einem beliebigen Zeitpunkt Ändern der aktuellen Standardeinstellung der JVM. Geben Sie besser die Zeitzone an.

Verwenden Sie übrigens immer richtige Zeitzonennamen als von der IANA definiert . Verwenden Sie niemals die Codes mit 3 bis 4 Buchstaben, 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-Time 2.7 Bibliothek.

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

Inkrementieren/Dekrementieren des Jahres

Wenn Sie das Ziel haben, ein Jahr nach dem anderen zu springen, müssen Sie die Jahreszahl nicht extrahieren. Sowohl Joda-Time als auch Java.time haben Methoden zum Addieren/Subtrahieren eines Jahres. Und diese Methoden sind intelligent und verarbeiten die Sommerzeit und andere Anomalien.

Beispiel in Joda-Time 2.7.

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

Wenn Ihre Anwendung stark von Datums- und Kalenderobjekten Gebrauch macht, sollten Sie wirklich die Joda-Zeit verwenden, da Java.util.Date ist veränderlich. Java.util.Calendar hat Leistungsprobleme, wenn seine Felder aktualisiert werden, und ist umständlich für Datetime-Arithmetik.

4
Alan

Wie einige Leute oben geantwortet haben:

Wenn Sie die Variable später verwenden möchten, verwenden Sie besser:

int year;

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

Wenn Sie das Jahr nur für eine Bedingung benötigen, verwenden Sie besser:

Calendar.getInstance().get(Calendar.YEAR)

Verwenden Sie es beispielsweise in einer Aktion, während das eingeführte Jahr nicht kleiner als das aktuelle Jahr - 200 oder größer als das aktuelle Jahr (könnte das Geburtsjahr sein):

import Java.util.Calendar;
import Java.util.Scanner;

public static void main (String[] args){

    Scanner scannernumber = new Scanner(System.in);
    int year;

    /*Checks that the year is not higher than the current year, and not less than the current year - 200 years.*/

    do{
        System.out.print("Year (Between "+((Calendar.getInstance().get(Calendar.YEAR))-200)+" and "+Calendar.getInstance().get(Calendar.YEAR)+") : ");
        year = scannernumber.nextInt();
    }while(year < ((Calendar.getInstance().get(Calendar.YEAR))-200) || year > Calendar.getInstance().get(Calendar.YEAR));
}
3
maral04

Sie können auch Java 8's LocalDate verwenden:

import Java.time.LocalDate;
//...
int year = LocalDate.now().getYear();

Verwenden Sie den folgenden Code für Java 8:

LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int date = localDate.getDayOfMonth();
0
KayV