繁体   English   中英

我怎样才能得到现在的月份?

[英]How can I get present months?

我试过

Calendar calendar= Calendar.getInstance();
System.out.println("use with command get time \"calendar.getTime()\"           : "+calendar.getTime());
System.out.println("use with command get month \"calendar.get(Calendar.MONTH)\": "+calendar.get(Calendar.MONTH));

但我找不到正确的月份。

这是我的 output

我怎样才能得到当前月份? 感谢阅读,抱歉我的英语不好。

java.time.LocalDate

您可以在下面使用 int 或 string 获取月份值

LocalDate.now().getMonthValue();
LocalDate.now().getMonth();

您还可以使用SimpleDateFormat方法获取当前日期和时间。

在这里看到我的function我得到当前的日期和时间供你参考

private void getTime(TextView dateTime) {
    Date date = new Date();
    @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EE, d MMM yyyy HH:mm:ss aaa");
    dateTime.setText(simpleDateFormat.format(date));
}

更多信息,您可以在这里参考android官方文档

以下是官方文档中的一些示例。 参考链接

SimpleDateFormat sdf = new SimpleDateFormat("MM");
Date date = new Date();
Log.d("MyTag", sdf.format(date));

这里MM以 integer 形式表示月份 (dec ~ 12) 这里MMM以字母表示月份 (Dec)

Sriram 的回答是正确的,并使用java.time.LocalDate class 提供了现代解决方案。这里有一些更多的细节。

时区

LocalDate#now方法隐式使用 JVM 当前的默认时区。 时区很重要,因为对于任何给定时刻,时间以及日期在全球范围内都可能因时区而异。 在日本东京可能是“明天”,而在美国俄亥俄州托莱多可能是“昨天”。

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
LocalDate today = LocalDate.now( z ) ;

如果您忽略传递ZoneId object,则会自动应用 JVM 的当前默认时区。 这与显式传递默认值具有相同的效果。

LocalDate today = LocalDate.now( ZoneId.systemDefault() ) ;

我建议使用明确的方法来使您的意图一目了然。

Month枚举

LocalDate#getMonth方法返回Month枚举 object。

Month month = LocalDate.now().getMonth() ;

如果您想生成文本来表示该值,您可以自动本地化。

Locale locale = Locale.CANADA_FRENCH ;
String output = month.getDisplayName( TextStyle.FULL , locale ) ;

请参阅在 Ideone.com 运行的这段代码

十二月

您可以通过调用Locale.getDefault()来访问 JVM 的当前默认语言环境。

Android

Android 26+ 实现了java.time类。

对于早期的 Android,使用最新的工具通过“API 脱糖”访问大部分java.time功能。

如果查看 class java.util.Calendar的源代码,您会发现以下常量:

    /**
     * Value of the {@link #MONTH} field indicating the
     * twelfth month of the year in the Gregorian and Julian calendars.
     */
    public static final int DECEMBER = 11;

因此calendar.get(Calendar.MONTH))正确返回 11(十一)。

但是,Android 8(API 级别 26)添加了 class LocalDate ,应该使用它代替 class Calendar 请注意,class Calendar包含日期和时间,而 class LocalDate仅包含日期。 Class LocalDateTime包含日期和时间。 还有 class LocalTime

根据now [static] 方法的文档,在 class LocalDate中:

从默认时区的系统时钟获取当前日期。

如果你想要当前月份,你可以调用方法getMonthValue哪个......

获取从 1 到 12 的月份字段。

或者,您可以调用getMonth方法,它...

使用Month枚举获取年月字段。

所以你的代码应该是:

java.time.LocalDate calendar = java.time.LocalDate.now();
System.out.println("calendar           : " + calendar);
System.out.println("calendar.getMonth(): " + calendar.getMonth());

产生以下 output:

calendar           : 2022-12-30
calendar.getMonth(): DECEMBER

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM