kotlin - Kotlin - 根据手机时间更改地图样式
问题描述
我正在尝试根据一天中的时间更改地图样式。下午 6 点我想将其更改为夜间地图,而在上午 6 点我想将其更改为白天地图。目前,我认为它总是返回夜间地图,即使它是白天。这是我目前所拥有的。我正在尝试比较时间,但可能格式错误。
val startNight = "18:00"
val startDay = "6:00"
val formatDate = SimpleDateFormat("HH:mm")
val parseNight = formatDate.parse(startNight)
val parseDay = formatDate.parse(startDay)
val currentTime = Calendar.getInstance().time;
if (currentTime.after(parseNight)) {
mMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(this, R.raw.night_style))
} else if (currentTime.after(parseDay)) {
mMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(this, R.raw.day_style))
}
解决方案
在 Kotlin REPL 中运行这些会产生答案:
parseNight
Thu Jan 01 18:00:00 GMT 1970
parseDay
Thu Jan 01 06:00:00 GMT 1970
解析时间假设日期为 1970 年 1 月 1 日。您也可以通过手动指定日期来修复当前实现,但更好的方法是使用新的 Java 8 日期实用程序:
val now = LocalDateTime.now()
// 6 AM today
val morning = now.withHour(6).withMinute(0)
// 6 PM today
val evening = now.withHour(18).withMinute(0)
val isDaytime = now.isBefore(evening) and now.isAfter(morning)
if (isDaytime) { showDayTimeMap() } else { showNightTimeMap() }
最好还是使用 LocalTime 而不是 LocalDateTime,但这并不能举例说明如何处理日期问题。
推荐阅读
- node.js - 具有其他用户权限的 NodeJS 下载文件
- lotus-notes - 无法将文档存档到 Lotus Notes 中的存档数据库
- android - 如果所有值都为零,则 MPAndroid 酒吧聊天在中间显示零值
- c# - Azure 函数 - 队列触发器函数意外停止处理消息
- aem - 如何在 Colorfield 中设置默认颜色
- pandas - 格式化问题:根据另一个变量获取一个变量的最大值并将结果合并到一个新表中
- python - 前馈神经网络语言模型
- sql-server - SQL Server:对整数列进行部分搜索
- javascript - 无法从 electron-js 成功连接到 sqlite3 数据库
- kubernetes - 如何将与服务的连接限制为 Kubernetes 中的 pod 列表?