【问题标题】:Calendar.getActualMaximum(Calendar.DAY_OF_MONTH) returns 31 allwaysCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) 总是返回 31
【发布时间】:2015-01-09 00:32:23
【问题描述】:

我有这个代码来计算用户选择的月份的上个月的最后一天。变量 monthNumber 为我提供了用户选择的月份:

        lastDayOfPreviousMonth.set(Calendar.YEAR, year);
        lastDayOfPreviousMonth.set(Calendar.MONTH, monthNumber-1);
        lastDayOfPreviousMonth.set(Calendar.DAY_OF_MONTH , lastDayOfPreviousMonth.getActualMaximum(Calendar.DAY_OF_MONTH));

问题是 lastDayOfPreviousMonth.getActualMaximum(Calendar.DAY_OF_MONTH)); 总是给我 31。¿为什么?

谢谢

【问题讨论】:

  • 使用lastDayOfPreviousMonth.getMaximum 而不是getActualMaxium。我觉得一旦你看到这个你就会明白差异:-/
  • @Panther:getMaximumfor any possible time value。我认为这行不通。
  • 你能给出你为yearmonthNumber测试的实际值吗?
  • year 是年份,monthnumber 的取值范围是 0 到 11

标签: android calendar android-calendar


【解决方案1】:

这不是获取上个月最大天数的适当方法。请尝试以下操作:

calendarPreviousMonth.add(Calendar.MONTH, -1);

【讨论】:

    【解决方案2】:

    我已经验证了你的程序,并且只添加了必要的声明和格式输出:

    GregorianCalendar lastDayOfPreviousMonth = new GregorianCalendar(2012, 2, 1);
    int month = 5; // May (here 1-based month)
    
    lastDayOfPreviousMonth.set(Calendar.YEAR, 2015);
    // 2 for one-based month-input and previous month
    lastDayOfPreviousMonth.set(Calendar.MONTH, month - 2);
    lastDayOfPreviousMonth.set(
        Calendar.DAY_OF_MONTH,
        lastDayOfPreviousMonth.getActualMaximum(Calendar.DAY_OF_MONTH)
    );
    
    System.out.println(lastDayOfPreviousMonth.getActualMaximum(Calendar.DAY_OF_MONTH)); 
    // output: 30
    
    System.out.println(DateFormat.getDateInstance().format(lastDayOfPreviousMonth.getTime()));
    // output: 30.04.2015
    

    它对我有用。也许你应该检查你的初始化和/或在 Dalvik VM 上使用这个示例代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多