代码之家  ›  专栏  ›  技术社区  ›  Stefan Ernst

在Java中计算一个月作为“中间”期间

  •  3
  • Stefan Ernst  · 技术社区  · 15 年前

    我要选择在给定月份的第一天和最后一天之间创建日期的记录。我用以下方式计算开始和结束日期的月份:

    “月”只是时间范围内的一个随机日期。

    Calendar cal = Calendar.getInstance();
    cal.setTime(month);
    int endday = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    int actualmonth = cal.get(Calendar.MONTH) + 1;
    int year = cal.get(Calendar.YEAR);
    
    Date begin = format.parse("01." + actualmonth + "." + year);
    Date end = format.parse(endday + "." + actualmonth + "." + year);
    

    当我想到这一点时,我实际上也必须设定白天,以避免在月的最后一天丢失记录。

    我觉得这有点不合时宜,有人想要更好的解决方案吗?

    3 回复  |  直到 15 年前
        1
  •  6
  •   Paul Tomblin    15 年前

      Calendar dateCal = Calendar.getInstance();
      dateCal.set(Calendar.MONTH, month);
      dateCal.set(Calendar.YEAR, year);
      dateCal.set(Calendar.HOUR_OF_DAY, 0);
      dateCal.set(Calendar.MINUTE, 0);
      dateCal.set(Calendar.SECOND, 0);
      dateCal.set(Calendar.MILLISECOND, 0);
      Date startDate = dateCal.getTime();
    
      dateCal.add(Calendar.MONTH, 1)
      dateCal.add(Calendar.MILLISECOND, -1);
      Date endDate = dateCal.getTime();
    
        2
  •  3
  •   James Goodwin    15 年前

    getActualMaximum(Calendar.DAY_OF_MONTH)
    getActualMinimum(Calendar.DAY_OF_MONTH)
    
        3
  •  0
  •   Stefan Ernst    15 年前

    Calendar cal = Calendar.getInstance();
    cal.setTime(month);
    cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.getActualMinimum(Calendar.DATE), 0, 0, 0);
    cal.set(Calendar.MILLISECOND, 0);
    Date begin = cal.getTime();
    cal.add(Calendar.MONTH, 1);
    cal.add(Calendar.MILLISECOND, -1);
    Date end = cal.getTime();