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

如何在JavaScript中将Graph API的UTC DateTime转换为IST以匹配数据库?

问题:将Microsoft Graph API返回的UTC时间转换为IST时区并匹配数据库数据

你从Microsoft Graph API获取的事件时间数据如下:

"start": {
        "dateTime": "2022-09-17T12:00:00.0000000",
        "timeZone": "UTC"
    },
    "end": {
        "dateTime": "2022-09-17T12:20:00.0000000",
        "timeZone": "UTC"
    }

该时间为UTC时区,而你的数据库中存储的事件时间为IST(印度标准时间,UTC+5:30)时区,需要将Graph返回的DateTime转换为IST格式后与数据库中的事件匹配,以下是可行的实现方法:


实现方法

1. C# 实现

利用TimeZoneInfo类完成时区转换:

// 解析Graph返回的UTC时间字符串
DateTime utcStartTime = DateTime.Parse("2022-09-17T12:00:00.0000000").ToUniversalTime();
DateTime utcEndTime = DateTime.Parse("2022-09-17T12:20:00.0000000").ToUniversalTime();

// 获取IST时区(系统时区ID为"India Standard Time")
TimeZoneInfo istTimeZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

// 转换为IST时间
DateTime istStartTime = TimeZoneInfo.ConvertTimeFromUtc(utcStartTime, istTimeZone);
DateTime istEndTime = TimeZoneInfo.ConvertTimeFromUtc(utcEndTime, istTimeZone);

// 格式化为数据库存储的字符串格式(示例为"yyyy-MM-dd HH:mm:ss")
string formattedIstStart = istStartTime.ToString("yyyy-MM-dd HH:mm:ss");
string formattedIstEnd = istEndTime.ToString("yyyy-MM-dd HH:mm:ss");

// 直接用格式化后的字符串与数据库数据匹配即可

2. Python 实现

可使用Python 3.9+内置的zoneinfo模块,或兼容旧版本的pytz库:

方法一:使用zoneinfo(Python 3.9+)

from datetime import datetime
from zoneinfo import ZoneInfo

# 解析UTC时间字符串并绑定UTC时区
utc_start = datetime.fromisoformat("2022-09-17T12:00:00.0000000").replace(tzinfo=ZoneInfo("UTC"))
utc_end = datetime.fromisoformat("2022-09-17T12:20:00.0000000").replace(tzinfo=ZoneInfo("UTC"))

# 转换为IST时区(Asia/Kolkata对应印度标准时间)
ist_start = utc_start.astimezone(ZoneInfo("Asia/Kolkata"))
ist_end = utc_end.astimezone(ZoneInfo("Asia/Kolkata"))

# 格式化为数据库存储的字符串格式
formatted_ist_start = ist_start.strftime("%Y-%m-%d %H:%M:%S")
formatted_ist_end = ist_end.strftime("%Y-%m-%d %H:%M:%S")

方法二:使用pytz(兼容旧版本Python)

from datetime import datetime
import pytz

# 解析UTC时间字符串并绑定UTC时区
utc_start = datetime.strptime("2022-09-17T12:00:00.0000000", "%Y-%m-%dT%H:%M:%S.%f").replace(tzinfo=pytz.utc)
utc_end = datetime.strptime("2022-09-17T12:20:00.0000000", "%Y-%m-%dT%H:%M:%S.%f").replace(tzinfo=pytz.utc)

# 获取IST时区
ist_timezone = pytz.timezone("Asia/Kolkata")
# 转换为IST时间
ist_start = utc_start.astimezone(ist_timezone)
ist_end = utc_end.astimezone(ist_timezone)

# 格式化为数据库存储格式
formatted_ist_start = ist_start.strftime("%Y-%m-%d %H:%M:%S")
formatted_ist_end = ist_end.strftime("%Y-%m-%d %H:%M:%S")

3. SQL 直接转换(数据库端处理)

如果你的数据库支持时区转换,可直接在查询语句中完成转换,无需应用层处理:

MySQL 示例

-- 假设数据库中IST时间字段为ist_start_time、ist_end_time(DATETIME类型)
SELECT * 
FROM events 
WHERE ist_start_time = CONVERT_TZ('2022-09-17 12:00:00', 'UTC', 'Asia/Kolkata')
  AND ist_end_time = CONVERT_TZ('2022-09-17 12:20:00', 'UTC', 'Asia/Kolkata');

PostgreSQL 示例

SELECT * 
FROM events 
WHERE ist_start_time = '2022-09-17T12:00:00.0000000'::TIMESTAMP WITH TIME ZONE AT TIME ZONE 'Asia/Kolkata'
  AND ist_end_time = '2022-09-17T12:20:00.0000000'::TIMESTAMP WITH TIME ZONE AT TIME ZONE 'Asia/Kolkata';

内容的提问来源于stack exchange,提问作者Ritik Joshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:15:40