在Java / Android中循环几个月

时间:2012-05-24 02:34:12

标签: java android date loops

我想循环一年中的几个月并打印出来。

例如:

01/2012 02/2012 03/2012 04/2012 等...

这是我的代码:

 Calendar myDate = Calendar.getInstance();

 for (int i = 0; i < totalMonths; i++) {
        TableRow row = new TableRow(this);
        myDate.add(Calendar.MONTH, i);
        FinalDate = df.format(myDate.getTime());
        TextView tvNum = new TextView(this);
        tvNum.setText("      " + FinalDate);
        row.addView(tvNum);
        table.addView(row);
    }
}

在int的

中打印出来

1 2 3 4 5

但是,当我将其转换为日期字符串时,如上面的代码所示,它执行此操作:

05/2012 06/2012 08/2012 二千零十二分之十一 03/2013 08/2013

基本上,月份的差距是1,然后是2,然后是3,然后是4等......我的计算错了吗? (显示1,2,3,4等的int列表正在做它应该做的事情)还是有更好的方法来打印几个月?

我只想要它去

今天的日期+ 1个月 今天的日期+ 2个月 等等... 这个m

4 个答案:

答案 0 :(得分:1)

您每次都会在当前日期添加i个月。

因此,第三次迭代将2个月添加到上一个日期,第四个迭代添加3等等。

每次只需添加1个月。

答案 1 :(得分:1)

你在哪里定义myDate?在循环之外,我假设?如果是这样,那么你第一次加0 + 0,第二次加(0 + 0)+1,第三次加(0 + 0 + 1)+2等等。

要解决这个问题,你必须在循环中定义myDate。

答案 2 :(得分:1)

而不是:

myDate.add(Calendar.MONTH, i);

myDate.add(Calendar.MONTH, 1);

或者每次都创建一个新日期。目前你正在操纵你的实际myDate对象。

答案 3 :(得分:0)

java.time和ThreeTenABP

我想贡献现代的答案。

    int noOfMonths = 13;
    YearMonth current = YearMonth.now(ZoneId.of("Africa/Tunis"));
    for (int i = 0; i < noOfMonths; i++) {
        System.out.println(current);
        current = current.plusMonths(1);
    }

今天我运行此代码段时,输出为:

2019-01
2019-02
2019-03
2019-04
2019-05
2019-06
2019-07
2019-08
2019-09
2019-10
2019-11
2019-12
2020-01

如果需要月份名称,请使用格式化程序:

    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM u", Locale.ENGLISH);
    int noOfMonths = 13;
    YearMonth current = YearMonth.now(ZoneId.of("Africa/Tunis"));
    for (int i = 0; i < noOfMonths; i++) {
        System.out.println(current.format(monthFormatter));
        current = current.plusMonths(1);
    }

输出:

January 2019
February 2019
March 2019
April 2019
May 2019
June 2019
July 2019
August 2019
September 2019
October 2019
November 2019
December 2019
January 2020

将近7年前问这个问题时,Calendar是我们从事此类任务的班级,同时它的设计欠佳且难以处理。不再有:几年后,java.time与Java 8一起发布,并且也被反向移植到Java 6和7。

问题:我可以在Android上使用java.time吗?

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接