GregorianCalendar出了什么错?

代码:

Log.e("year = ",eventiCompleti.get(i).year);
Log.e("month = ",eventiCompleti.get(i).month);
Log.e("day = ",eventiCompleti.get(i).day);
Log.e("hour = ",eventiCompleti.get(i).hour);

TimeZone MyTimezone = TimeZone.getDefault();
Calendar calendar = new GregorianCalendar(MyTimezone);                              
calendar.set(Integer.parseInt(eventiCompleti.get(i).year),Integer.parseInt( eventiCompleti.get(i).month),Integer.parseInt( eventiCompleti.get(i).day),0,0,0);
String month_name=calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());//Locale.US);
String day_name=calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());

Log.e("day of the week = ",day_name);

输出:

06-30 21:33:55.828: E/year =(11254): 2013
06-30 21:33:55.828: E/month =(11254): 08
06-30 21:33:55.828: E/day =(11254): 07
06-30 21:33:55.828: E/hour =(11254): 18:00
06-30 21:33:55.828: E/day of the week =(11254): Saturday

但是2013年8月7号并不是星期六。

不知道哪出错了?

谢谢。

这里的错误可能是月份的问题,Java 中的月份是从 0 开始的,因此对于 8 月,实际上是 7。


另外,我注意到你在这里使用了 Calendar 和 GregorianCalendar,但是在设置日期时使用了字符串(例如 eventiCompleti.get(i).year)。这可能会导致类型转换错误。


您可以尝试使用下面的代码来纠正错误:

TimeZone MyTimezone = TimeZone.getDefault();
Calendar calendar = new GregorianCalendar(MyTimezone);

// 修改月份为从 1 开始
calendar.set(
  Integer.parseInt(eventiCompleti.get(i).year),
  Integer.parseInt(eventiCompleti.get(i).month) - 1,
  Integer.parseInt(eventiCompleti.get(i).day),
  0,
  0,
  0
);

String month_name = calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
String day_name = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());

Log.e("day of the week = ", day_name);

这应该会使输出为正确的星期几。