java - 使用 ThreeTen 在 Android 中显示日期时发生冲突
问题描述
我在 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;
}
这是显示日期的图片,请检查:
解决方案
for
循环中的逻辑缺陷
您将天数添加到前一个日期,而不是您的开始日期。
在您的循环i
中运行值 0 到 6。您从 10 月 21 日星期日开始。第一次通过您的循环添加 0 天,所以仍然有 10 月 21 日(正确)。下次添加 1 天时,得到 10 月 22 日,星期一也正确。下次您添加 2 天并获得 10 月 24 日。然后您添加 3 天、4 天等。这解释了您的结果。
两个可能的修复。改变这个:
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 ) ;
…<em>或者这个:
dates.add( localDate ) ;
localDate = localDate.plusDays( 1 ) ; // only add 1 day to previous date
在第一种情况下,为清楚起见,最好将localDate
变量名称更改startDate
为 。
推荐阅读
- azure - 在 Azure 中的大量 VM 上进行 CodedUI 测试
- pandas - Pandas 确实基于字段进行汇总
- python - Jinja2 - 复制变量而不是引用它
- google-app-engine - 是否可以从另一个项目连接到 Google Cloud Memorystore?
- google-sheets - 如何在 Google 表格中选择正确的范围
- angular - 我的 vs 代码中的自动导入为 rxjs 运算符和 CanActivate 接口建议了模棱两可的导入语句
- python - 如何组合来自多个文件的多行并将它们放入数组
- django - 为什么 React 不显示任何数据?
- bash - 一个命令中 bash 中失败的反引号的默认值
- typescript - 在模块内使用模块进行类型声明无法编译(TS2503 找不到命名空间)