【问题标题】:Java subtract months without LibraryJava减去没有库的月份
【发布时间】:2014-10-20 16:58:36
【问题描述】:

我想在没有任何库的情况下从整数中减去月份。

问题是当我从第一个月减少 1 个月时:0(1 月)应该是 12(12 月)但它会是 -1..

这是我的添加代码

    int currentMonthInt = Integer.parseInt(currentMonth) - 1;
    int currentYearInt = Integer.parseInt(currentYear);

    // show today month
    if (dateposition == 0){
        showListView(currentMonth, currentYear, db);
    }

    // show next month
    for (int i = 1; i <=200; i++){
        if (dateposition == i){
            int month = currentMonthInt + i;
            int year = currentYearInt + (month / 12);
            month = (month % 12)+1;

            String monthString = String.format("%02d", month);
            String yearString = String.valueOf(year);
            showListView(monthString, yearString, db);
        }
    }

这是我的减法代码:(但它不起作用)

    for (int i = -200; i < 0; i++){
            //This is not correct!
            //int month = currentMonthInt + i;
            //int year = currentYearInt + (month / 12);
            //month = (month % 12)+1;

            String monthString = String.format("%02d", month);
            String yearString = String.valueOf(year);
            showListView(monthString, yearString, db);
    }

附: dateposition 是月份的位置,如果它的 0 是今天的月份和年份,如果它的 +1 是下个月,依此类推,如果它的 -1 是上个月

【问题讨论】:

  • 尝试使用Joda
  • 减去month = (month % 12)+1;的代码你确定它正确吗? , 如果你有第 0 个月,即使在这种情况下,上面的公式也会只返回一个。
  • a % b 可能在a 为负数时给出负数。
  • 减法代码不正确我只是要求...
  • 请使用库。否则你会弄错的。有各种重要的极端情况。

标签: java date math calendar


【解决方案1】:

好的,我写了它,我测试它的工作原理!

    for (int i = -200; i < 0; i++){
        if (dateposition == i){
            int month = currentMonthInt + i;
            int year = currentYearInt + (month / 12);

            if (month >= 0){
                month = (month % 12)+1;
            } else {
                int c1 = Math.abs(month / 12) + 1;
                month += (12 * c1);
            }

            String monthString = String.format("%02d", month);
            String yearString = String.valueOf(year);
            showListView(monthString, yearString, db);
        }
    }

【讨论】:

    【解决方案2】:

    使用Joda library

    public void test() {
        LocalDate fromDate = LocalDate.now();
        System.out.println(fromDate);
        LocalDate newYear = fromDate;
        for (int i = 0; i < 10; i++) {
            newYear = newYear.minusMonths(1);
            System.out.print(newYear + ", ");
        }
        System.out.println("\n-------");
        newYear = fromDate;
        for (int i = 0; i < 10; i++) {
            newYear = newYear.plusMonths(1);
            System.out.print(newYear + ", ");
        }
    }
    

    输出:

    2014-10-20
    2014-09-20, 2014-08-20, 2014-07-20, 2014-06-20, 2014-05-20, 2014-04-20, 2014-03-20, 2014-02-20, 2014-01-20, 2013-12-20, 
    -------
    2014-11-20, 2014-12-20, 2015-01-20, 2015-02-20, 2015-03-20, 2015-04-20, 2015-05-20, 2015-06-20, 2015-07-20, 2015-08-20, 
    

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 2014-05-10
      相关资源
      最近更新 更多