我想循环一年中的几个月并打印出来。
例如:
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
答案 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)
我想贡献现代的答案。
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。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。