OpenWeatherMap日出日落时间转换后仅差1分钟问题求助
问题原因与解决方案
我一眼就看出问题所在啦!核心有两个点,其中最关键的是时间戳单位不匹配,其次是时区处理缺失:
1. 时间戳单位错误:秒 vs 毫秒
OpenWeatherMap返回的sunrise和sunset是秒级的Unix时间戳,但Java/Kotlin的Date构造函数需要的是毫秒级的时间戳。如果你直接把API返回的数字传给Date,相当于把时间往后推了整整三个数量级——结果就是这两个时间都落在1970年1月的同一个小时里,两者的实际时间差只有41秒左右,用h:m a格式(只显示到分钟)格式化后,自然就看起来只差1分钟了!
2. 时区未正确设置
API返回的时间戳是UTC标准时间,而你需要显示尼泊尔当地时间(UTC+5:45,对应timezone字段的20700秒偏移量)。但你的SimpleDateFormat默认使用了本地时区,就算时间戳转对了,也会显示错误的当地时间。
修正后的代码
首先,处理时间戳时要乘以1000转成毫秒:
// 假设sunrise/sunset是从API获取的Long类型秒数 val sunriseDate = Date(sunrise * 1000L) val sunsetDate = Date(sunset * 1000L)
然后修改你的格式化函数,指定尼泊尔时区:
fun formatTime(sun: Date): String { // 使用Locale确保AM/PM显示正确,同时指定尼泊尔时区 val timeFormat = SimpleDateFormat("h:mm a", Locale.ENGLISH) timeFormat.timeZone = TimeZone.getTimeZone("Asia/Kathmandu") return timeFormat.format(sun) }
验证结果
用你的API数据测试:
sunrise=1571444437→ 转毫秒后是UTC时间2019-10-18 10:20:37,尼泊尔当地时间是下午4:05sunset=1571485599→ 转毫秒后是UTC时间2019-10-18 21:06:39,尼泊尔当地时间是次日凌晨2:51
这样就得到了正确的日出日落时间,不会再出现只差1分钟的问题啦!
内容的提问来源于stack exchange,提问作者dream projects
相关产品推荐
相关产品推荐

