You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:05
  • sunset=1571485599 → 转毫秒后是UTC时间2019-10-18 21:06:39,尼泊尔当地时间是次日凌晨2:51

这样就得到了正确的日出日落时间,不会再出现只差1分钟的问题啦!

内容的提问来源于stack exchange,提问作者dream projects

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:18:39