Python中为API调用的日期变量设置IST与EDT时区方法问询
为日期变量设置IST和EDT时区的实现方案
要给代码里的startDate和endDate指定时区,得把原生的无时区datetime对象转成带时区信息的对象,推荐用Python 3.9+自带的zoneinfo标准库,低版本可以用第三方库pytz。
1. 设置为IST(印度标准时间)
用Python 3.9+的zoneinfo:
import datetime as dt from zoneinfo import ZoneInfo # 获取当前带IST时区的时间 now_ist = dt.datetime.now(tz=ZoneInfo("Asia/Kolkata")) startDate = now_ist - dt.timedelta(days=2 * 365) endDate = now_ist data.getDataset(stock=stock, startDate=startDate, endDate=endDate, con=con)
用低版本的pytz:
import datetime as dt import pytz ist_tz = pytz.timezone("Asia/Kolkata") now_ist = dt.datetime.now(ist_tz) startDate = now_ist - dt.timedelta(days=2 * 365) endDate = now_ist data.getDataset(stock=stock, startDate=startDate, endDate=endDate, con=con)
2. 设置为美国EDT(东部夏令时)
注意:EDT是夏令时,直接用IANA标准时区America/New_York即可,它会自动处理夏令时/冬令时的切换,不用手动指定EDT缩写:
用Python 3.9+的zoneinfo:
import datetime as dt from zoneinfo import ZoneInfo now_edt = dt.datetime.now(tz=ZoneInfo("America/New_York")) startDate = now_edt - dt.timedelta(days=2 * 365) endDate = now_edt data.getDataset(stock=stock, startDate=startDate, endDate=endDate, con=con)
用低版本的pytz:
import datetime as dt import pytz edt_tz = pytz.timezone("America/New_York") now_edt = dt.datetime.now(edt_tz) startDate = now_edt - dt.timedelta(days=2 * 365) endDate = now_edt data.getDataset(stock=stock, startDate=startDate, endDate=endDate, con=con)
关键提醒
- 别用
dt.datetime.today()直接生成日期,它返回的是不带时区的“裸”对象,必须转成带时区的对象才能正确传给API。 - 一定要用IANA标准时区名(比如
Asia/Kolkata、America/New_York),别用IST、EDT这类缩写——缩写可能有歧义,还没法自动处理夏令时切换。
内容的提问来源于stack exchange,提问作者Satheesh Kumar
相关产品推荐
相关产品推荐

