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

datetime.date与datetime.time处理:塔尔萨时间转IST报错求简洁方案

塔尔萨时区转IST时区的DataFrame时间转换问题

我有一个包含date列和time列的DataFrame,需要将塔尔萨时区的队列时间转换为IST时区。最初编写的代码因datetime.date与str类型无法比较报错,修改类型后又出现datetime.time与timedelta无法相加的错误,现寻求简洁高效的实现方法。

原代码

# converting queue time(TULSA time) to IST
for r in range(df.shape[0]):
    queue_date = df.loc[r,'queue date']
    queue_time = df.loc[r,'queue time']
    if queue_date<'2022-03-13':
        ist_time = abs(queue_time + '11:30:00')
    elif queue_date>'2022-03-13':
        ist_time = abs(queue_time + '10:30:00')
    elif queue_date=='2022-03-13':
        if queue_time>='02:00:00':
            ist_time  = abs(queue_time + '10:30:00')
        else:
            ist_time = abs(queue_time + '11:30:00')

报错信息

TypeError: '<' not supported between instances of 'datetime.date' and 'str'

修改后的代码

if queue_date<pd.to_datetime('2022-03-13').date():
    ist_time = abs(queue_time + timedelta(hours=11,minutes=30,seconds=0))
elif queue_date>pd.to_datetime('2022-03-13').date():
    ist_time = abs(queue_time + timedelta(hours=10,minutes=30,seconds=0))
elif queue_date==pd.to_datetime('2022-03-13').date():
    if queue_time>=pd.to_datetime('02:00:00').time():
        ist_time  = abs(queue_time + timedelta(hours=10,minutes=30,seconds=0))
    else:
        ist_time = abs(queue_time + timedelta(hours=11,minutes=30,seconds=0))

报错信息

TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

简洁高效的解决方案

手动判断日期和夏令时不仅容易出错,循环遍历行的效率也极低。推荐使用pandas的矢量化操作结合时区库自动处理转换:

  1. 合并date和time列,生成带塔尔萨时区的完整datetime对象
  2. 直接转换为IST时区,自动处理夏令时差异
import pandas as pd
from pytz import timezone

# 合并日期和时间列,生成塔尔萨时区的datetime
df['tulsa_datetime'] = pd.to_datetime(df['queue date'].astype(str) + ' ' + df['queue time'].astype(str))
# 本地化到塔尔萨所在的美国中部时区,自动推断夏令时模糊时间
df['tulsa_datetime'] = df['tulsa_datetime'].dt.tz_localize(timezone('US/Central'), ambiguous='infer')

# 转换为IST时区(印度标准时间)
df['ist_datetime'] = df['tulsa_datetime'].dt.tz_convert(timezone('Asia/Kolkata'))

# 按需拆分出IST的日期和时间列
df['ist_date'] = df['ist_datetime'].dt.date
df['ist_time'] = df['ist_datetime'].dt.time

错误原因说明

  • 第一个错误:datetime.date类型与字符串直接比较,类型不匹配,必须统一为日期类型后再比较
  • 第二个错误:datetime.time对象不支持与timedelta直接相加,只有datetime.datetime对象支持此类时间运算

内容的提问来源于stack exchange,提问作者Soumya Pandey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:31:00