Frage

Ich brauche das aktuelle Jahr in Java als eine ganze Zahl zu bestimmen. Ich konnte einfach verwenden java.util.Date(), aber es ist veraltet.

War es hilfreich?

Lösung

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

Nicht sicher, ob dies mit den Kriterien erfüllt von keinem neuen Kalender einrichten? (Warum die Opposition so zu tun?)

Andere Tipps

Mit Java 8 Zeit API (vorausgesetzt, Sie sind glücklich, das Jahr, in dem System der Standard-Zeitzone zu erhalten), könnten Sie ein href verwenden <= "https://docs.oracle.com/javase/8/docs/api /java/time/Year.html#now--“rel = "noreferrer"> die Year::now Methode :

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

Das einfachste (mit Kalender, sorry) ist:

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

Es gibt auch die neuen Datum und Uhrzeit API JSR sowie Joda Zeit

Der einfachste Weg ist das Jahr aus dem Kalender zu erhalten.

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

Wenn Sie das Jahr ein beliebiges Datum Objekt wollen, habe ich die folgende Methode:

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

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

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

tl; dr

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

Zeitzone

Die Antwort von Raffi Khatchadourian weise zeigt, wie die neuen verwenden richtige Zeitzone Namen 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-Time

Eine Vorstellung, wie oben, aber mit der Joda-Time 2.7 Bibliothek.

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

Inkrementieren / Dekrementieren Jahr

Wenn Ihr Ziel ein Jahr zu einem Zeitpunkt, zu springen ist, keine Notwendigkeit, die Jahreszahl zu extrahieren. Sowohl Joda-Time und java.time haben Methoden für das Hinzufügen / ein Jahr zu einem Zeitpunkt abgezogen wird. Und diese Methoden sind smart, Umgang mit der Sommerzeit und andere Anomalien.

Beispiel in Joda-Time 2.7.

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

Wenn Ihre Anwendung ist die starke Nutzung von Datum und Kalender-Objekte vornehmen, sollten Sie wirklich Joda Zeit verwenden, da java.util.Date wandelbar ist. java.util.Calendar hat Performance-Probleme, wenn ihre Felder aktualisiert werden, und ist für Datetime-Arithmetik klobig.

Sie können auch Java 8er verwenden LocalDate :

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

Wie einige Leute oben beantwortet:

Wenn Sie später die Variable verwenden, eine bessere Nutzung:

int year;

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

Wenn Sie das Jahr für nur eine Bedingung, die Sie besser zu nutzen:

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

Zum Beispiel verwendet es in einem Do, während in diesem Jahr eingeführt Kontrollen nicht weniger als das laufende Jahr-200 oder mehr als das laufende Jahr (Könnte 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 das Ganze mit Integer Mathematik tun, ohne einen Kalender zu instanziiert zu benötigen:

return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);

Auch für eine Stunde oder zwei im neuen Jahr aus sein, aber ich habe nicht den Eindruck bekommen, dass ein Thema?

Ich verwende spezielle Funktionen in meiner Bibliothek mit Tag / Monat / Jahr Ints zu arbeiten -

int[] int_dmy( long timestamp ) // remember month is [0..11] !!!
{
  Calendar cal = new GregorianCalendar(); cal.setTimeInMillis( timestamp );
  return new int[] { 
    cal.get( Calendar.DATE ), cal.get( Calendar.MONTH ), cal.get( Calendar.YEAR )
  };
};


int[] int_dmy( Date d ) { 
 ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top