pandas中时间戳的处理

我的理解:
狭义的时间戳是1970-01-01至今的纳秒数,本身其实是个int对象。
广义的时间戳是python中的datetime对象,自带时区信息,不指定时区时,默认是UTC时区。
处理时间戳的时候,时间字符串、datetime对象、int时间戳,这三者之间转换的方向非常的重要,我个人比较容易混淆。

例如

import pandas as pd
time_string='2021-07-13 00:00:00'
time_datetime = pd.to_datetime(time_string)
# Timestamp('2021-07-13 00:00:00')
time_int = time_datetime.value
# 1626134400000000000

我本意是想得到time_string在中国时区(东八区)的时间戳,。但是因为在时间字符串和datetime对象转换过程中没有指定时区,得到的time_int 其实是UTC的时间戳,这个时间戳转换到北京时区其实是2021-07-13 08:00:00

因此,介绍几种带时区的转换方式

1.时间字符串 -> datetime对象 -> int时间戳

import pandas as pd
time_string='2021-07-13 00:00:00'
time_datetime = pd.DatetimeIndex([time_string], tz='Asia/Shanghai')
# DatetimeIndex(['2021-07-13 00:00:00+08:00'], dtype='datetime64[ns, Asia/Shanghai]', freq=None)
time_int = time_datetime .astype(int)

pd.DatetimeIndex可以传入list对象或者pd.Series对象

update_date = '2021-07-13'
pd.date_range(f'{update_date} 09:25', f'{update_date} 11:30', freq='3s', tz='Asia/Shanghai',name='datetime')

2.datetime对象 -> 时间字符串

import pandas as pd
pd.DatetimeIndex([time_string], tz='Asia/Shanghai').astype(str)
# 或
pd.DatetimeIndex([time_string], tz='Asia/Shanghai').strftime('%Y-%m-%d')

3.int时间戳 -> datetime对象

# UTC时间'2021-07-13 00:00:00'
pd.DatetimeIndex([1626134400000000000], tz='Asia/Shanghai')
# DatetimeIndex(['2021-07-13 08:00:00+08:00'], dtype='datetime64[ns, Asia/Shanghai]', freq=None)

分割线
2021-10-14新增:
1.time 模块
可使用time模块处理字符串和UTC时间之间的转换

#时间戳转字符串
from time import localtime,strftime
now = 1407694710
local_tuple = localtime(now)
time_format = '%Y-%m-%d %H:%M:%S'
time_str = strftime(time_format,local_tuple)
print(time_str)

#字符串转时间戳
from time import mktime,strptime
time_tuple= strptime(time_str,time_format)
utc_now = mktime(time_tuple)
print(utc_now)

如果一定要使用time模块,那就应该只将它用在UTC和宿主计算机的当地时间进行转换。对于其他类型的转换来说,还是使用datetime比较好

2.datetime模块
如果想将一个地方的时间转换成另一个地方的时间,应该将UTC时间作为中间的桥梁

#UTC格式时间转计算机本地时间
from datetime import datetime,timezone
now = datetime(2014,8,10,18,18,30)
now_utc = now.replace(tzinfo=timezone.utc)
now_local = now_utc.astimezone()
print(now_local)

#本地时间转UTC格式UNIX时间戳
time_str = '2021-08-10 11:18:30'
now = datetime.strptime(time_str,time_format)
time_tuple = now.timetuple()
utc_now = mktime(time_tuple)
print(utc_now)

#将字符串转成UTC
import pytz
arrival_nyc = '2014-05-01 23:33:24'
nyc_dt_naive = datetime.strptime(arrival_nyc,time_format)
eastern = pytz.timezone('US/Eastern')
nyc_dt = eastern.localize(nyc_dt_naive)
utc_dt = pytz.utc.normalize(nyc_dt.astimezone(pytz.utc))
print(utc_dt)

#把该UTC转旧金山当地时间
pacific = pytz.timezone('US/Pacific')
sf_dt = pacific.normalize(utc_dt.astimezone(pacific))
print(sf_dt)
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值