如何在Android中获得当前年份?

Shu*_*ubh 30 java android

我试过了

int year = Calendar.get(Calendar.YEAR);
Run Code Online (Sandbox Code Playgroud)

但它给了我编译时错误

无法从静态上下文引用非静态方法'get(int)'.

我从observable的调用方法调用此方法.

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

我也见过(new Date()).getYear();但它被弃用了.

dsn*_*ode 102

因为您需要先创建实例.

试试这个

Calendar.getInstance().get(Calendar.YEAR);
Run Code Online (Sandbox Code Playgroud)

你很高兴.


Waj*_*Ali 5

是的,您得到一个错误,因为这不是静态方法。首先,您需要创建Calendar类的实例。

Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
Run Code Online (Sandbox Code Playgroud)

在这里,您可以获得年份,当前年份!


Bas*_*que 5

tl; dr

Year.now()
    .getValue()
Run Code Online (Sandbox Code Playgroud)

java.time

其他答案使用麻烦的旧日期时间类,例如日历。这些已被java.time类取代。对于旧版本的Android,请参见ThreeTen-Backport和ThreeTenABP项目。

Year

而不是仅传递整数来表示年份,而是传递对象。即Year班级。

获取当前年份需要一个时区。在任何给定的时刻,日期都会在全球范围内变化。因此有可能Pacific/Auckland同时出现在2018年America/Montreal和2017年。

最好明确地传递所需/期望区域。如果省略,则隐式获取JVM的当前默认时区。该默认值可以在运行时随时更改,因此不可靠。

ZoneId z = ZoneId.now( "Asia/Kolkata" ) ;
Year y = Year.now( z ) ;
Run Code Online (Sandbox Code Playgroud)

当您确实需要整数时,请提取值。

int yearNumber = y.getValue() ;
Run Code Online (Sandbox Code Playgroud)

关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

在哪里获取java.time类?

  • “年份”需要Android API 26或Java 1.8。 (3认同)