web-dev-qa-db-de.com

Wie bekomme ich das aktuelle Jahr in Android?

Ich habe es versucht

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

aber es gibt mir beim kompilieren zeitfehler das 

Die nicht statische Methode 'get (int)' kann nicht aus einem statischen Kontext referenziert werden.

Ich rufe diese Methode von Aufrufmethode Observable.

Observable.combineLatest(ob1 ob2,
                ob3, new Func3<String, String, String, Boolean>() {
                    @Override
                    public Boolean call(String a, String b, String c) {...

Ich hatte auch (new Date()).getYear(); gesehen, aber es ist veraltet.

22
Shubh

Weil Sie zuerst eine Instanz erstellen müssen.

versuche dies

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

und du bist gut zu gehen.

78
dsncode

Ja, Sie erhalten einen Fehler, da dies keine statische Methode ist. Zuerst müssen Sie eine Instanz der Calendar-Klasse erstellen.

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

und hier bekommst du Jahr, aktuelles Jahr!

4
Wajid Ali

tl; dr

Year.now()
    .getValue()

Java.time

Die anderen Antworten verwenden die problematischen alten Datums-/Uhrzeitklassen wie z. B. Kalender. Diese werden durch die Java.time-Klassen ersetzt. Ältere Versionen von Android finden Sie in den ThreeTen-Backport- und ThreeTenABP-Projekten. 

Year Klasse

Anstatt bloße ganze Zahlen zu übergeben, um ein Jahr darzustellen, gehen Sie um Objekte herum. Und zwar die Year -Klasse.

Um das aktuelle Jahr zu erhalten, ist eine Zeitzone erforderlich. Für jeden Moment variiert das Datum auf der ganzen Welt nach Zone. So ist es möglich, dass Pacific/Auckland auf 2018 ist, während America/Montreal in 2017 gleichzeitig ist. 

Besser die gewünschte/erwartete Zone explizit übergeben. Wenn nicht angegeben, erhalten Sie implizit die aktuelle Standardzeitzone der JVM. Diese Vorgabe kann sich jederzeit zur Laufzeit ändern und ist daher nicht zuverlässig. 

ZoneId z = ZoneId.now( "Asia/Kolkata" ) ;
Year y = Year.now( z ) ;

Wenn Sie eine ganze Zahl benötigen, extrahieren Sie den Wert.

int yearNumber = y.getValue() ;

Über Java.time

Das Java.time -Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die lästigen alten Legacy Date-Time-Klassen wie Java.util.Date , Calendar , & SimpleDateFormat .

Das Joda-Time - Projekt, jetzt im Wartungsmodus , empfiehlt die Migration zu den Java.time -Klassen.

Weitere Informationen finden Sie im Oracle Tutorial . In Stack Overflow finden Sie viele Beispiele und Erklärungen. Spezifikation ist JSR 310 .

Wo erhalten Sie die Java.time-Klassen? 

4
Basil Bourque
// get current year、month and day
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);

// get current year millis
Time time = new Time(Time.TIMEZONE_UTC);
calendar.set(year, 0, 0, 0, 0, 0);
long year = calendar.getTimeInMillis();
time.set(year);
year = time.toMillis(true);
1
Wrong Chao

du solltest benutzen

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

0
Rajen Raiyarela

Haben Sie den folgenden Code ausprobiert? 

Kalender c = Calendar.getInstance ();

int seconds = c.get(Calendar.SECOND);
int hour = c.get(Calendar.HOUR_OF_DAY); // IF YOU USE HOUR IT WILL GIVE 12 HOUR USE HOUR_OF_DAY TO GET 24 HOUR FORMAT
int minutes = c.get(Calendar.MINUTE);
int date = c.get(Calendar.DATE);
int month = c.get(Calendar.MONTH) + 1; // in Java month starts from 0 not from 1 so for december 11+1 = 12
int year = c.get(Calendar.YEAR);
0
Zidane