Ich muss das aktuelle Jahr in Java als Ganzzahl bestimmen. Ich könnte einfach Java.util.Date()
verwenden, aber es ist veraltet.
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?)
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();
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
Am einfachsten ist es, das Jahr aus dem Kalender abzurufen.
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
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;
}
ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) )
.getYear()
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.
Beispiel in Java.time von Java 8.
int year = ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ).getYear() ;
Eine Idee wie oben, aber mit der Joda-Time 2.7 Bibliothek.
int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;
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 ) ;
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.
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));
}
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();