android-studio - 如何使用 kotlin 制作时隙
问题描述
"StartingTime":"11:00",
"EndingTime":"5:00"
您好,我有一个 JSON 响应,其中我有这两个字符串。我想做的是我想使用这些startingTime 和 EndingTime.BTW 制作时隙,这两个可以针对不同的响应进行更改。我想制作时隙它们之间有 2 小时的差异。我还想在 EndingTime 之后再增加 2 小时。
示例:开始时间 = 11:00 结束时间 = 5:00
我需要的时间段 = 11:00-1:00 , 1:00-3:00 , 3:00-5:00 , 5:00-7:00
同样,一旦我得到这个时间段,我想将它们存储并添加到微调器中。我怎样才能实现它。谢谢。
解决方案
您可以制作一个简单的数据类来表示一个时隙。
data class TimeSlot(val startTime: LocalTime, val endTime: LocalTime)
然后编写一个函数,将其拆分为适合的多个插槽:
fun TimeSlot.divide(lengthHours: Long): List<TimeSlot> {
require(lengthHours > 0) { "lengthHours was $lengthHours. Must specify positive amount of hours."}
val timeSlots = mutableListOf<TimeSlot>()
var nextStartTime = startTime
while (true) {
val nextEndTime = nextStartTime.plusHours(lengthHours)
if (nextEndTime > endTime) {
break
}
timeSlots.add(TimeSlot(nextStartTime, nextEndTime))
nextStartTime = nextEndTime
}
return timeSlots
}
请注意,这个简单的比较nextEndTime > endTime
不会处理跨越午夜的时间范围。如果你想处理它,你必须让它变得更复杂一些。
您可以在其他现有问题中查找如何将 JSON 值解析为 LocalTimes 以及如何从列表中填充 Spinner。
推荐阅读
- html - 如何将两个 div 对齐?
- windows-installer - 以编程方式检测正在安装的 MSI 包
- gradle - 在 ABI 的 NDK 工具链文件夹中找不到带有前缀的工具链:mips64el-linux-android Flutter
- r - R中匹配的&符号系列?
- java - 如何在 Spring Boot 中修复“ConditionalOnProperty are Exclusive”?
- javascript - 如何替换 Vue js 数组上的外部 javascript 数组?
- java - Hibernate 复杂的 1+N 问题将同一对象的多个实例提取到结果集中
- git - 使用 git 在本地和产品配置之间切换
- php - 按字段对数组中的数据进行分组 - 均匀排列
- ubuntu - Ubuntu 安装多个 Cuda 工具包版本及其补丁