Java GregorianCalendar 和 Calendar 错位了 2010 年 8 月和 9 月的周末、一个月中的日期

标签 java android gregorian-calendar

我正在尝试使用日历或公历来迭代并创建日期网格。然而,他们俩似乎都认为2010年8月有30天,9月2日和3日是周末。就好像日历的年份错误,但我已经对该参数进行了三次检查。以下是一些摘录。

startDate.set(2010, 8, 28);

SchedulerCalendar currentDate = (SchedulerCalendar) startDate.clone(); 
  for(int i = 0; i<daysDisplayed; i++){ 
   newDate = new TextView(this); 
   String dateString = currentDate.get(Calendar.MONTH)+"/"+currentDate.get(Calendar.DATE);
   //+"/"+currentDate.get(Calendar.YEAR);
   newDate.setText(dateString);
   newDate.setId(i+1);
   newDate.setWidth(blockWidth);
   newDate.setHeight(DATE_HEIGHT);
   dateBar.addView(newDate);
   currentDate.add(Calendar.DATE, 1);
  }


 private class SchedulerCalendar extends GregorianCalendar {
  @Override
  public void add(int field, int value) {
   super.add(field, value);
   if(this.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY) {
    if(value>=0) super.add(Calendar.DATE, 2);
    if(value<0) super.add(Calendar.DATE, -1);
   }
   if(this.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY) {
    if(value>=0) super.add(Calendar.DATE, 1);
    if(value<0) super.add(Calendar.DATE, -2);
   }
  }
 }

最佳答案

我强烈怀疑您没有考虑到月份是从 0 开始的这一事实。所以这个:

startDate.set(2010, 8, 28);

将其设置为 2010 年 9 月 28 日。您还没有说出您期望的日期,但我怀疑您想要 8 月(在 java.util.Calendar 中是第 7 个月)。

考虑到10 月 2 日和 3 日是星期六和星期日,我怀疑这就是问题所在。

我可以强烈建议您使用 Joda Time作为您的日期和时间 API 而不是 java.util.{Date,Calendar}?内置类有很多这样的陷阱。

关于Java GregorianCalendar 和 Calendar 错位了 2010 年 8 月和 9 月的周末、一个月中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3700496/

相关文章:

java - 使用 EclipseLink 在 JPA、hibernate 中重命名 persistence.xml 时出现问题

java - midi 键盘不适用于所有平台

android - 在 AVD 中为 Galaxy mini s4 创建模拟器配置文件

Java 1.5 Calendar#compareTo() 混淆

android - Android 的日期类中的年份不正确

java - 在 ServletOutputStream 中写入字节时管道损坏

java - Android 设备监视器屏幕显示这个奇怪的空白屏幕,并且没有任何功能

java - ANDROID:获取按钮 XML Id

android - 如何从已经运行的服务中获取数据?

android - 用户更改设备语言时应用程序崩溃