小隐的博客

人生在世,笑饮一生
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于在python中时间的转换

Posted on 2023-04-24 17:55  隐客  阅读(106)  评论(0编辑  收藏  举报

这个时间在不同的情况下,可能有些差异

先说pandas下面的Series,可能是时间类型(该时间类型为pandas下的,跟python的datetime下的不是同种类型),但带有时区,一般为了后续方便统一换成相同时区或没有时区的

import pandas as pd

# 创建一个带有时区信息的 Series
s = pd.Series(pd.date_range('2022-01-01 00:00:00', periods=3, freq='H', tz='Asia/Shanghai'))

# 将 Series 转换为不带时区信息的 Series
s_without_tz = s.dt.tz_localize(None)

print('带有时区信息的 Series:')
print(s)

print('\n不带时区信息的 Series:')
print(s_without_tz)

 否则可能报错:代码中报错Can only use .dt accessor with datetimelike values

如果不处理时区问题,可能提示:can't compare offset-naive and offset-aware datetimes

 

判断有没有时区,一个是datetime下的,一个是pandas下面的

from datetime import datetime, timezone, timedelta

# 创建带有时区信息的日期时间对象
dt_with_tz = datetime(2022, 4, 25, 12, 0, 0, tzinfo=timezone(timedelta(hours=8)))

# 判断日期时间对象是否具有时区信息
if dt_with_tz.tzinfo is not None:
    print('dt_with_tz has timezone information')
else:
    print('dt_with_tz does not have timezone information')

  

import pandas as pd

# 创建带有时区信息的日期时间对象
dt_with_tz = pd.Timestamp('2022-04-25 12:00:00', tz='Asia/Shanghai')

# 判断日期时间对象是否具有时区信息
if dt_with_tz.dt.tz is not None:
    print('dt_with_tz has timezone information')
else:
    print('dt_with_tz does not have timezone information') 

 

去掉时区,也分pandas和datetime

 import pandas as pd

# 创建一个带有时区信息的 DataFrame
df = pd.DataFrame({'timestamp': pd.date_range('2022-04-25 12:00:00', periods=3, tz='Asia/Shanghai')})

# 显示带有时区信息的时间列
print(df['timestamp'])

# 将时间列中的时区信息去掉
df['timestamp'] = df['timestamp'].dt.tz_localize(None)

# 显示去掉时区信息后的时间列
print(df['timestamp'])

  

import datetime

# 创建一个带有时区信息的 datetime 对象
dt_with_tz = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=8)))

# 将带有时区信息的 datetime 对象转换为没有时区信息的对象
dt_without_tz = dt_with_tz.astimezone(datetime.timezone.utc).replace(tzinfo=None)

print(dt_with_tz)  # 输出: 2022-05-07 13:28:15.183422+08:00
print(dt_without_tz)  # 输出: 2022-05-07 05:28:15.183422

  实际上,不是简单直接去掉时区,如果时区不同,可能还要把时间加上去,下面是个例子把pd中的内容更新示例

import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5]})

# 查看 col1 列的值
print(df['col1'])  # 输出: 1  2  3  4  5

# 对 col1 列的所有值都加上 1
df['col1'] = df['col1'].apply(lambda x: x + 1)

# 查看加法计算后的结果
print(df['col1'])  # 输出: 2  3  4  5  6

 在更新之前要获取tzinfo中的时差,然后加上去即可

import datetime

dt = datetime.datetime.now(datetime.timezone.utc)
tz_offset = dt.tzinfo.utcoffset(None)
print(tz_offset) # 输出:0:00:00

  

大概是这样

data1["eob"]=data1["eob"].apply(lambda x: x.astimezone(timezone.utc).replace(tzinfo=None) if (x.tzinfo.utcoffset(None)==None)else (x + x.tzinfo.utcoffset(None)).astimezone(timezone.utc).replace(tzinfo=None)    )

  

 

QQ交流