Hoe het huidige jaar op Android te krijgen?

Ik heb het geprobeerd

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

maar het geeft me een compileerfout die

Niet-statische methode ‘get(int)’ kan niet worden verwezen vanuit een statische context.

Ik roep deze methode aan vanaf de aanroepmethode van waarneembaar.

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

Ik had ook (new Date()).getYear();gezien, maar het is verouderd.


Antwoord 1, autoriteit 100%

Omdat u eerst een instantie moet maken.

probeer dit

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

en je bent klaar om te gaan.


Antwoord 2, autoriteit 8%

#tl;dr

Year.now()
    .getValue()

java.time

De andere antwoorden gebruiken de lastige oude datum-tijdklassen zoals Kalender. Deze worden verdrongen door de java.time-klassen. Zie voor oudere versies van Android de projecten ThreeTen-Backport en ThreeTenABP.

Yearklas

In plaats van alleen gehele getallen door te geven om een ​​jaar weer te geven, geef je objecten door. Namelijk het Yearklasse.

Om het huidige jaar te krijgen, is een tijdzone vereist. Voor elk willekeurig moment varieert de datum over de hele wereld per zone. Het is dus mogelijk dat Pacific/Aucklandtegelijkertijd in 2018 is en America/Montrealin 2017.

Het is beter om expliciet de gewenste/verwachte zone te passeren. Als u dit weglaat, krijgt u impliciet de huidige standaardtijdzone van de JVM. Die standaard kan op elk moment tijdens runtime veranderen, dus het is niet betrouwbaar.

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

Als je een geheel getal nodig hebt, extraheer je de waarde.

int yearNumber = y.getValue() ;

Over java.time

De java.timeframework is ingebouwd in Java 8 en hoger. Deze klassen vervangen de lastige oude legacydatum-tijdklassen zoals java.util.Date, Calendar, & SimpleDateFormat.

Zie voor meer informatie de Oracle-zelfstudie. En zoek Stack Overflow voor veel voorbeelden en uitleg. Specificatie is JSR 310.

Het Joda-Time-project, nu in onderhoudsmodus, adviseert migratie naar de java.timeklassen.

U kunt java.timeobjecten rechtstreeks uitwisselen met uw database. Gebruik een JDBC-stuurprogrammadat voldoet aan JDBC 4.2of hoger. Geen strings nodig, geen java.sql.*klassen. Slaapstand 5 & JPA 2.2 ondersteunt java.time.

Waar zijn de java.time-klassen te verkrijgen?


Antwoord 3, autoriteit 8%

Ja, je krijgt een foutmelding omdat dit geen statische methode is. Eerst moet je een instantie van de klasse Calendar maken.
d.w.z.

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

Als uw min API-versie <26 is, kunt u ook een steno maken:

val yearInt = Year.now().value

Antwoord 4, autoriteit 2%

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

Antwoord 5

je zou moeten gebruiken

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


Antwoord 6

Heb je de onderstaande code geprobeerd

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

Antwoord 7

u kunt Calendar.getInstance() .get(Calendar.YEAR )ook gebruiken voor Kotlintaaldoeleinden

Other episodes