Calendar.MONTH 给出错误的值

问题描述 投票:0回答:7

我正在尝试使用以下命令从

Calendar
获取实际月份:

Calendar c = Calendar.getInstance();          
String time = String.valueOf(c.get(Calendar.MONTH));

根据系统设置“设置 --> 日期和时间”,实际月份为 10,而

get(Calendar.MONTH)
返回 09。

android calendar
7个回答
37
投票

请记住,月份值从

0
开始,因此
October
实际上是月份编号
9

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#MONTH


9
投票

Calendar.MONTH
返回从零开始的月份,这就是为什么它给出的值比实际月份少 1 加 1 即可得到正确的值

String time = String.valueOf(c.get(Calendar.MONTH)+1);

4
投票

Calendar.MONTH

退货

0 for 1st month (jan)
1 for 2nd month (feb)
.
.
11 for 12th month (dec)

文档

因此将您的代码更改为

String time = String.valueOf(c.get(Calendar.MONTH)+1);// added 1 

0
投票

Calendar.MONTH 值从 0 到 11 开始,而不是 1 到 12。

您可以检查Calendar.JANUARY的值是0而不是1。

参考:http://developer.android.com/reference/java/util/Calendar.html#JANUARY


0
投票

我建议尝试一下

@Override
public void onSelectedDayChange(CalendarView view, int year, int month, int day) {
Toast.makeText(getApplicationContext(), month+1 + "/" + day  + "/" + year, Toast.LENGTH_SHORT).show();
calDate = month+1 + "/" + day + "/" + year; }
});

0
投票

用这个

    public void DateDialog(){

    DatePickerDialog.OnDateSetListener listener=new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
        {
            int Month;
            Month=monthOfYear+1;
            fromDate.setText(year + "-" + Month + "-" + dayOfMonth);
        }};
    DatePickerDialog dpDialog=new DatePickerDialog(getActivity(), listener, year, month, day);
    dpDialog.getDatePicker().setMinDate(mcalendar.getTimeInMillis());
    dpDialog.show();
}

0
投票

java.time

2014 年 3 月,Java 8 引入了现代的

java.time
日期时间 API,取代了容易出错的旧版
java.util
日期时间 API
。任何新代码都应使用
java.time
API*

使用现代日期时间 API 的解决方案

您可以使用

ZonedDateTime#now
获取当前日期时间,然后使用
ZonedDateTime#getMonth
获取当前月份的
enum
常量。

演示:

public class Main {
    public static void main(String[] args) {
        // ZoneId.systemDefault() returns the system default time zone.
        // Replace it as per your requirement e.g. ZoneId.of("Asia/Kolkata").
        ZonedDateTime now = ZonedDateTime.now(ZoneId.systemDefault()); // Current date-time
        System.out.println(now);

        // Get the current month
        Month month = now.getMonth();
        System.out.println(month);

        // In case you want to get the numeric value of the month
        System.out.println(now.getMonthValue());

        // In case you want to get the name of the month
        System.out.println(month.getDisplayName(TextStyle.FULL, Locale.ENGLISH));
        System.out.println(month.getDisplayName(TextStyle.FULL, Locale.forLanguageTag("hi-IN"))); // Hindi
        System.out.println(month.getDisplayName(TextStyle.FULL, Locale.forLanguageTag("bn-BD"))); // Bangla
    }
}

在 UTC 系统上执行示例运行时的输出:

2024-10-19T22:34:16.791600Z[GMT]
OCTOBER
10
October
अक्तूबर
অক্টোবর

在线演示

注意: 如果由于某种原因,您需要

java.util.Date
的实例,请使用
now
将上述代码中的
java.util.Date
转换为
Date date = Date.from(now.toInstant())
实例。

Trail:日期时间了解有关现代日期时间 API 的更多信息。


* 如果您收到

java.util.Date
的实例,请使用
java.time.Instant
 将其转换为 
Date#toInstant
,并根据您的要求从中派生
java.time
的其他日期时间类。

© www.soinside.com 2019 - 2024. All rights reserved.