Python时间格式转换

一、标准库
1、import time
time模块中时间表现的格式主要有三种:
a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
b、struct_time时间元组,共有九个元素组。
c、format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

2、import datetime
datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。

二、格式名称
1、时间格式名称:时间戳
示例:1584039884.0
float格式

2、时间格式名称:结构化时间格式,时间元组
示例:time.struct_time(tm_year=2020, tm_mon=3, tm_mday=13, tm_hour=3, tm_min=9, tm_sec=0, tm_wday=4, tm_yday=73, tm_isdst=0)
获取方式:
# time.time() 得到的是float型时间戳 struct_time = time.localtime(time.time()) # 得到结构化时间格式

3、时间格式名称:format_time
示例:2016-10-26 16:48:41
获取方式:
# 生成format_time #struct_time to format_time time.strftime("%Y-%m-%d %X") time.strftime("%Y-%m-%d %X",time.localtime())

4、时间格式名称:datetime格式
示例:2020-03-13 03:02:13.469749
获取方式:
date_time = datetime.datetime.now() print(date_time)

5、ISO 8601标准(字符串)格林治时间格式
type:str
例如:2018-06-20T02:31:00Z
字母T ==> 代表使用UTC时间结尾;
字母Z ==> 4位数字格式的时间偏移量,不写的时候默认不偏移(当前时区),为Z的时候表示0时区:
获取方式:
date_time = datetime.datetime.now().isoformat() print(date_time)

6/UTC(世界协调时间格式)
例如:2020-03-31 16:00:00+00:00 (+时区)
class ‘pandas._libs.tslibs.timestamps.Timestamp’

二、格式转换
1、datetime格式转换成时间戳
ans_time = time.mktime(date_time.timetuple()) print(ans_time)

2、时间戳转年月日时间样式的字符串
# time.time() 得到的是float型时间戳 struct_time = time.localtime(time.time()) # 得到结构化时间格式 now_time = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)

3、时间戳(float)转ISO 标准(字符串)格林治时间格式
timestamp是float类型(如:1627536136.0122457),小数点前10位表示秒,小数点后三位毫秒,后4-6位纳秒
如果float数据超过10位,如13位,要除1000
如果是16位,除以6
如果要保留毫秒,丢弃纳秒(2021-07-29T15:18:06.866)timestamp保留小数点后3位即可
round(timestamp/1000000,3)

dt_time = datetime.datetime.fromtimestamp(timestamp)	# 转为datetime格式	'2021-07-29T14:04:41.037000'
# dt_time = datetime.datetime.fromtimestamp(timestamp).replace(microsecond=0)	# 去掉微秒'2021-07-29T14:03:46'
# dt_time = datetime.datetime.fromtimestamp(timestamp).replace(tzinfo=datetime.timezone.utc)	# 提供时区信息 '2021-07-29T14:05:40.526000+00:00'
iso_time = datetime.datetime.isoformat(dt_time)				# 转为iso格式 type:str  2021-07-29T15:18:06.866223
iso_time = datetime.datetime.isoformat(dt_time)[:-3] + 'Z'  # 转为iso,带Z,按字符串操作  2021-07-29T15:18:06.866Z

3、iso转换为时间戳

st = datetime.datetime.sprptime(isotime,'%Y-%m-%dT%H:%M:%S%z')
timestamp = int(time.mktime(st.timetuple()))

3、时间戳转字符串
struct_time = time.localtime(time.time()) # 得到结构化时间格式
now_time = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)

4、datetime转字符串

import datetime as dt
date_time = datetime.datetime.now().timetuple()
time_str = datetime.strftime(data_time,'%Y%m%d%H%M%S')
# 方法2,批量转换
df['datetime'] = df['Day'].dt.strftime("%Y-%m-%d")	# 好像要用dt,直接用datetime不行

说明:strftime只能转换struct_time格式,datetime格式用timetuple()返回日期对应的time.struct_time对象;否则出现TypeError: Tuple or struct_time argument required

strftime:str from time

5、字符串转struct_time
time_rel = datetime.strptime(time_str,’%Y-%m-%d %H:%M:%S’)
strptime:str
strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。

6、datetime格式转ISO 8601格式
目标格式为‘2018-06-20T02:31:00Z’的字符串
date_time = datetime.datetime.now() date_time_iso = datetime.strftime(date_time, '%Y-%m-%dT%H:%M:%SZ') print(date_time_iso)

8、时间格式由 2020-06-05 00:00:00 转为 2020-06-05T00:00:00Z(字符串格式转字符串格式)

start_time = '2020-06-05 00:00:00'
start_time_datetime = pd.to_datetime(start_time)
date_time_iso = datetime.strftime(start_time_datetime, '%Y-%m-%dT%H:%M:%SZ')
# 方法2,批量处理
df3.index = df3.index.map(lambda x: dt.datetime.strftime(x, '%Y-%m-%dT%H:%M:%SZ'))

10、2020-06-24T02:50:00.165Z字符串转成2020-06-24 02:50:00

df['time'] = pd.to_datetime(df['time']).dt.strftime("%Y-%m-%d %H:%M:%S")

三、series格式时间转换
3.1dataframe整列时间转换
df[‘time’] = pd.to_datetime(df[‘time’])
实际获得格式class ‘pandas._libs.tslibs.timestamps.Timestamp’

3.2格式特殊,按格式转换
df[‘time’] = pd.to_datetime(df[‘time’], format=’%Y-%m-%dT%H:%M:%S.000Z’)

3.3 整列时间戳转

df['Time'] = pd.to_datetime(df['Time']/1000, unit='s')
# unit='s', 'ms','D'

转换前series里是float,注意长度和unit要匹配,不匹配/1000或*1000看看
转换后<class ‘pandas._libs.tslibs.timestamps.Timestamp’>

四、特殊时间获取
当天零点时间:
now_time = datetime.datetime.now()
date_time = now_time - datetime.timedelta(hours=now_time .hour, minutes=now_time .minute, seconds=now_time.second, microseconds=now_time.microsecond)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

779醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值