How to get current year in android?
I tried
int year = Calendar.get(Calendar.YEAR);
but it is giving me compile time error that
Non-static method 'get(int)' cannot be referenced from a static context.
I am calling this method from call method of observable.
Observable.combineLatest(ob1 ob2,
ob3, new Func3<String, String, String, Boolean>() {
@Override
public Boolean call(String a, String b, String c) {...
I had also seen (new Date()).getYear();
but it is deprecated.
Solution 1:
Because you need to create an instance first.
try this
Calendar.getInstance().get(Calendar.YEAR);
and you are good to go.
Solution 2:
Yeah, you get an error because this is not a static method. First you need to create an instance of the Calendar class.
i.e.
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
If your min API version is <26, you can do a shorthand as well:
val yearInt = Year.now().value
Solution 3:
#tl;dr
Year.now()
.getValue()
java.time
The other Answers use the troublesome old date-time classes such as Calendar. These are supplanted by the java.time classes. For older versions of Android, see the ThreeTen-Backport and ThreeTenABP projects.
Year
class
Rather than pass around mere integers to represent a year, pass around objects. Namely, the Year
class.
Getting the current year requires a time zone. For any given moment, the date varies around the globe by zone. So it is possible for Pacific/Auckland
to be on 2018 while America/Montreal
is in 2017 simultaneously.
Better to pass explicitly the desired/expected zone. If omitted, you implicitly get the JVM’s current default time zone. That default can change at any moment during runtime, so it is not reliable.
ZoneId z = ZoneId.now( "Asia/Kolkata" ) ;
Year y = Year.now( z ) ;
When you do need an integer, extract the value.
int yearNumber = y.getValue() ;
About java.time
The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date
, Calendar
, & SimpleDateFormat
.
To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.
The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.
You may exchange java.time objects directly with your database. Use a JDBC driver compliant with JDBC 4.2 or later. No need for strings, no need for java.sql.*
classes. Hibernate 5 & JPA 2.2 support java.time.
Where to obtain the java.time classes?
-
Java SE 8, Java SE 9, Java SE 10, Java SE 11, and later - Part of the standard Java API with a bundled implementation.
- Java 9 brought some minor features and fixes.
-
Java SE 6 and Java SE 7
- Most of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
-
Android
- Later versions of Android (26+) bundle implementations of the java.time classes.
- For earlier Android (<26), the process of API desugaring brings a subset of the java.time functionality not originally built into Android.
- If the desugaring does not offer what you need, the ThreeTenABP project adapts ThreeTen-Backport (mentioned above) to Android. See How to use ThreeTenABP….
Solution 4:
// 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);
Solution 5:
you should use
Calendar.getInstance().get(Calendar.YEAR)
;