如何通过OpenWeather API获取特定地点的当前日期与时间?
用OpenWeather API时区值获取当地当前时间的解决办法
OpenWeather API返回的timezone字段是UTC偏移秒数(比如北京时区对应28800,即8×3600秒),不是标准时区字符串,直接用new Date()处理自然会出问题。下面是两种靠谱的转换方法:
方法1:结合API返回的UTC时间戳计算
API返回的dt字段是当前UTC时间的秒级时间戳,把它与时区偏移秒数相加,再转成毫秒级时间戳后传入new Date()即可得到当地时间:
// 示例API返回数据 const openWeatherRes = { dt: 1696156800, // UTC秒级时间戳 timezone: 28800 // 目标地点的UTC偏移秒数 }; // 转换为当地时间的毫秒级时间戳 const localTimeMs = (openWeatherRes.dt + openWeatherRes.timezone) * 1000; const localDateTime = new Date(localTimeMs); // 输出格式化后的当地时间 console.log(localDateTime.toLocaleString()); // 示例输出:"2023/10/1 12:00:00"
方法2:基于当前UTC时间计算偏移
如果不需要API返回的dt,想用实时时间,直接拿当前UTC毫秒时间戳加上偏移秒数转成的毫秒数即可:
const timezoneOffsetSec = 28800; // 从API获取的时区偏移秒数 const currentUtcMs = Date.now(); const localTimeMs = currentUtcMs + timezoneOffsetSec * 1000; const localDateTime = new Date(localTimeMs); console.log(localDateTime.toLocaleString());
注意事项
- 别搞混秒和毫秒:OpenWeather的
dt和timezone都是秒单位,而new Date()只接受毫秒级时间戳,必须乘以1000转换。 - 如果需要更灵活的时区格式化,可以用
Intl.DateTimeFormat指定时区,但前提是你能拿到时区标识符(比如"Asia/Shanghai"),而OpenWeather的timezone字段不提供这个,所以上面的方法更直接。
内容的提问来源于stack exchange,提问作者Priya Mittal
相关产品推荐
相关产品推荐

