在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"
核心逻辑说明
- 根据返回的
day映射成对应星期的数字,计算出最近的一次对应星期的日期(如果当天已过广播时间,则取下周)。 - 结合
time字段构建东京时区的完整日期时间对象。 - 将该对象转换为本地时区,再按需格式化输出。
内容的提问来源于stack exchange,提问作者Ye Min Hein
相关产品推荐
相关产品推荐

