首页 > 解决方案 > 将 UTC 日期时间列转换为 IST 数据时间

问题描述

我有 df(.xlsx 格式),日期列采用 UTC 格式

date
2018-07-31 00:00
2018-07-31 00:10    
2018-07-31 00:20    
2018-07-31 00:30    
2018-07-31 00:40

我想转换成 IST(+5:30) 格式,如下所示

date
2018-07-31 05:30
2018-07-31 05:40    
2018-07-31 05:50    
2018-07-31 06:00    
2018-07-31 06:10

many solutions available on stack overflow but its does not match with my criteria.

标签: python-3.x

解决方案


这是一种使用datetime.timedelta.

前任:

import datetime
data = ["2018-07-31 00:00", "2018-07-31 00:10", "2018-07-31 00:20", "2018-07-31 00:30", "2018-07-31 00:40"]
for i in data:
    print( datetime.datetime.strptime(i, "%Y-%m-%d %H:%M") + datetime.timedelta(hours=5, minutes=30) )

输出:

2018-07-31 05:30:00
2018-07-31 05:40:00
2018-07-31 05:50:00
2018-07-31 06:00:00
2018-07-31 06:10:00

使用pytz模块。

前任:

import datetime
from pytz import timezone, utc

tz = timezone('Asia/Kolkata')
data = ["2018-07-31 00:00", "2018-07-31 00:10", "2018-07-31 00:20", "2018-07-31 00:30", "2018-07-31 00:40"]
for i in data:
    print( datetime.datetime.strptime(i, "%Y-%m-%d %H:%M").replace(tzinfo=utc).astimezone(tz) )

输出:

2018-07-31 05:30:00+05:30
2018-07-31 05:40:00+05:30
2018-07-31 05:50:00+05:30
2018-07-31 06:00:00+05:30
2018-07-31 06:10:00+05:30

熊猫DF

import pandas as pd

data = ["2018-07-31 00:00", "2018-07-31 00:10", "2018-07-31 00:20", "2018-07-31 00:30", "2018-07-31 00:40"]
df = pd.DataFrame({"Date": data})
df["Date_IST"] = pd.to_datetime(df["Date"]) + pd.DateOffset(hours=5, minutes=30)
print(df)

输出:

               Date            Date_IST
0  2018-07-31 00:00 2018-07-31 05:30:00
1  2018-07-31 00:10 2018-07-31 05:40:00
2  2018-07-31 00:20 2018-07-31 05:50:00
3  2018-07-31 00:30 2018-07-31 06:00:00
4  2018-07-31 00:40 2018-07-31 06:10:00

推荐阅读