提问人:Lets Explorer 提问时间:10/26/2018 最后编辑:AnonymousLets Explorer 更新时间:10/26/2018 访问量:69
使用 ThreeTen 在 Android 中显示日期时发生冲突
Conflicts while displaying dates in Android using ThreeTen
问:
我在 android 中使用 ThreeTen 来显示从当前日期开始的 1 周日期。但是,问题是日期没有以正确的顺序显示。
这是我从当前日期开始的第 1 周日期的代码:
public List<LocalDate> getWeekDays() {
ZoneId z = ZoneId.of("Pacific/Auckland"); // Or ZoneId.of( "Africa/Tunis" )
LocalDate today = LocalDate.now( z ) ;
LocalDate localDate = today.with( org.threeten.bp.temporal.TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) ) ;
List< LocalDate > dates = new ArrayList<>( 7 ) ;
for( int i = 0 ; i < 7 ; i ++ ) {
localDate = localDate.plusDays( i ) ;
dates.add( localDate ) ;
}
return dates;
}
这是显示日期的图片,请检查一下:
答:
3赞
Anonymous
10/26/2018
#1
for
循环中的逻辑缺陷
您是在上一个日期添加天数,而不是在开始日期上添加天数。
在循环中遍历值 0 到 6。你从 10 月 21 日星期日开始。第一次通过你的循环,你增加了 0 天,所以仍然有 10 月 21 日(正确)。下次添加 1 天时,将得到 10 月 22 日,也更正为星期一。下次您添加 2 天并获得 10 月 24 日。然后添加 3 天、4 天等。这解释了您的结果。i
两种可能的修复方法。更改此项:
localDate = localDate.plusDays( i ) ;
dates.add( localDate ) ;
...到以下任一:
LocalDate ld = localDate.plusDays( i ) ; // Add `i` number of days to the *start* date, not the incrementing date.
dates.add( ld ) ;
...或者这个:
dates.add( localDate ) ;
localDate = localDate.plusDays( 1 ) ; // only add 1 day to previous date
在第一种情况下,为了清楚起见,最好将变量名称更改为 。localDate
startDate
下一个:无法在索引 33 处解析文本
评论