【发布时间】:2020-05-07 17:22:32
【问题描述】:
我从 DarkSkyApi 获取所选位置的日出和日落时间的 UNIX 时间戳,我想将其转换为 DateTime 格式并将其显示给用户。我希望时间值是本地的。
示例:用户在意大利并选择“Tokyo, JP”作为获取天气信息的所需位置。日出和日落时间值应格式化并显示为当地时间。所以对于东京来说,日出应该在凌晨 4 点 34 分和晚上 18 点 36 分左右才能看到日落。
就我现在所拥有的而言,我得到了错误的值,例如日出 12:17 和日落 2:29。关于我在这里做错了什么有什么想法吗?
附: tmz var 是所选位置的时区,因此在本例中为“亚洲/东京”。这是我现在在日落时间(日出时间相同)所做的事情:
private fun setViewHolderWeekDaySunsetTime(holder: ViewHolder, sunsetTime: Long, tmz: String) {
val dt = Instant.ofEpochSecond(sunsetTime).atZone(
ZoneId.of(tmz)
)
val formatted = dt.format(DateTimeFormatter.ofPattern("HH:mm"))
holder.weekDaySunsetTime.text = formatted
}
【问题讨论】:
-
您没有使用 unix 时间戳,而是将其乘以 1000。因此您正在对未来 50000 年左右的日期进行日期格式化。登录
dt查看 -
@FrankNeblung 我不应该将它乘以 1000 以获得以毫秒为单位的纪元时间吗?
-
@FrankNeblung 如果我不将 unix 时间戳乘以 1000,我会得到这个
unix time = 1588930440 sunset time = 1970-01-19T11:22:10.440+02:00[Europe/Athens]。当我乘以它时,我得到:unix time = 1588930440 sunset time = 2020-05-08T12:34+03:00[Europe/Athens]使用此日志语句Log.i("WEEKLYWEATHER","unix time = $sunsetTime sunset time = $dt") -
应该格式化并显示为当地时间 - 这是一种会导致时区问题的愚蠢想法。本地到where - 用户(在意大利)还是到日落(在日本)?为什么不显示
sunsetTime、tmz或holder的实际值?
标签: android kotlin datetime-format darksky