小隐的博客

人生在世,笑饮一生
随笔 - 304, 文章 - 0, 评论 - 349, 阅读 - 50万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

关于在python中时间的转换

Posted on   隐客  阅读(119)  评论(0编辑  收藏  举报

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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下面的

1
2
3
4
5
6
7
8
9
10
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')

  

1
2
3
4
5
6
7
8
9
10
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

1
2
3
4
5
6
7
8
9
10
11
12
13
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'])

  

1
2
3
4
5
6
7
8
9
10
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中的内容更新示例

1
2
3
4
5
6
7
8
9
10
11
12
13
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中的时差,然后加上去即可

1
2
3
4
5
import datetime
 
dt = datetime.datetime.now(datetime.timezone.utc)
tz_offset = dt.tzinfo.utcoffset(None)
print(tz_offset) # 输出:0:00:00

  

大概是这样

1
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)    )

  

 

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
QQ交流
点击右上角即可分享
微信分享提示