【发布时间】:2021-06-28 12:36:21
【问题描述】:
我正在开发一个简单的天气应用程序,并尝试以“K:mm a”格式显示时间(例如上午 6:30)。我正在为用户搜索的指定位置(例如 NYC)获取 Unix、UTC 中的时间戳。时间戳看起来像 1624836905,时区偏移量像 -14400。我有一个函数将两者相加,将其转换为毫秒,并应以指定的格式返回时间。函数如下:
fun dateTime(time: Int, zone: Int, format: String = "EEE, MMMM d K:mm a"): String {
return try {
val sdf = SimpleDateFormat(format)
val netDate = Date((time.plus(zone)).toLong() * 1000)
sdf.timeZone = TimeZone.getTimeZone("UTC")
sdf.format(netDate)
} catch (e: Exception) {
e.toString()
}
}
我称之为:
sunriseTextView.text = dateTime(result2.lookup<Int>("daily.sunrise")[0], timeZone, "K:mm a")
sunsetTextView.text = dateTime(result2.lookup<Int>("current.sunset")[0], timeZone, "K:mm a")
预期输出是日出/日落时间,例如早上 6:01 和晚上 9:05。我也在从 API 获得的指定地点渲染当前时间。如下:
dateView.text = dateTime(result2.lookup<Int>("current.dt")[0], timeZone)
以“EEE, MMMM d K:mm a”格式输出该地点的当前日期和时间(例如,6 月 28 日星期一上午 8:23)。
当前时间总是正确的,但是日出和日落时间有问题。例如,如果我输入 NYC,日出是晚上 7:35,日落是上午 10:39。另一方面,东京的日出和日落在凌晨 4:27 和晚上 7:00 显示是正确的。
显然我遗漏了一些东西,因为我知道 API 数据是正确的。我正在寻找任何建议,但是,如果没有 API 限制,例如需要 API 26 的 kotlinx-datetime,我将不胜感激。
【问题讨论】: