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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:15:29