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

在React.js中如何将Jikan API的广播时间转换为本地时区?

将Jikan API返回的广播时间转换为本地时间

Jikan返回的广播数据只有星期几+固定时间(东京时区),没有具体日期,要转成本地时间,核心是先构建出东京时区的具体日期时间对象,再转换到本地时区。以下是两种常用语言的实现方案:


JavaScript 实现

// 假设从Jikan API获取的广播数据
const broadcast = {
  "day": "Saturdays",
  "time": "01:53",
  "timezone": "Asia/Tokyo",
  "string": "Saturdays at 01:53 (JST)"
};

// 映射星期几到Date.getDay()的返回值(周日0,周六6)
const daysMap = {
  "Sundays": 0,
  "Mondays": 1,
  "Tuesdays": 2,
  "Wednesdays": 3,
  "Thursdays": 4,
  "Fridays": 5,
  "Saturdays": 6
};

const targetDay = daysMap[broadcast.day];
const now = new Date();
const [hours, minutes] = broadcast.time.split(':').map(Number);

// 计算距离下一次广播的天数
let daysToAdd = (targetDay - now.getDay() + 7) % 7;
// 如果今天就是广播日,但当前时间已过,就取下周的同一时间
const todayBroadcast = new Date(now.getFullYear(), now.getMonth(), now.getDate(), hours, minutes);
if (daysToAdd === 0 && now > todayBroadcast) {
  daysToAdd = 7;
}

// 创建东京时区的广播时间对象(Date内部为UTC,通过构建时间点对应JST)
const jstBroadcast = new Date(now.getFullYear(), now.getMonth(), now.getDate() + daysToAdd, hours, minutes);
// 转换为本地时区并格式化输出
const localTime = jstBroadcast.toLocaleString('zh-CN', {
  weekday: 'long',
  hour: '2-digit',
  minute: '2-digit',
  timeZoneName: 'short'
});

console.log(localTime); // 示例输出:"星期六 00:53 CST"(本地为北京时间时)

Python 实现

需先安装pytz库处理时区:

pip install pytz
from datetime import datetime, timedelta
import pytz

# Jikan返回的广播数据
broadcast = {
    "day": "Saturdays",
    "time": "01:53",
    "timezone": "Asia/Tokyo",
    "string": "Saturdays at 01:53 (JST)"
}

# 映射星期几到datetime.weekday()的返回值(周一0,周六5,周日6)
days_map = {
    "Mondays": 0,
    "Tuesdays": 1,
    "Wednesdays": 2,
    "Thursdays": 3,
    "Fridays": 4,
    "Saturdays": 5,
    "Sundays": 6
}

target_weekday = days_map[broadcast.day]
jst_tz = pytz.timezone(broadcast["timezone"])
now_jst = datetime.now(jst_tz)

# 解析广播时分
broadcast_hour, broadcast_minute = map(int, broadcast["time"].split(':'))
today_broadcast = now_jst.replace(hour=broadcast_hour, minute=broadcast_minute, second=0, microsecond=0)

# 计算距离下一次广播的天数
days_to_add = (target_weekday - now_jst.weekday() + 7) % 7
if days_to_add == 0 and now_jst > today_broadcast:
    days_to_add = 7

# 构建完整的东京时区广播时间
jst_broadcast_time = today_broadcast + timedelta(days=days_to_add)
# 转换为本地时区(自动获取系统本地时区)
local_broadcast_time = jst_broadcast_time.astimezone()

# 格式化输出
print(local_broadcast_time.strftime('%A %H:%M %Z'))  # 示例输出:"Saturday 00:53 CST"

核心逻辑说明

  1. 根据返回的day映射成对应星期的数字,计算出最近的一次对应星期的日期(如果当天已过广播时间,则取下周)。
  2. 结合time字段构建东京时区的完整日期时间对象。
  3. 将该对象转换为本地时区,再按需格式化输出。

内容的提问来源于stack exchange,提问作者Ye Min Hein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:22:11