python中datetime和字符串相互转换

时间序列(time series)数据是一种重要的结构化数据形式,在进行时间序列问题分析时,通常需要将字符串和datetime类型相互转换,本文分享他们之间相互转换的集中常用方法(主要用到的库有datetime、pandas以及dateutil)。

(一)、datetime的生成

from datetime import datetime
# 当时时间
now=datetime.now()
# 指定时间
test=datetime(2020,1,26,11,11,11)

(二)、datetime转化为字符串 datetime→str

datetime类型转成str一般常用的有两种方法:str和传入格式化字符串的strftime方法。

1.str()类型转换

from datetime import datetime
stamp = datetime(2020, 2, 2)
stamp
image.png
str(stamp)
image.png

2.strftime方法类型转换

stamp.strftime('%Y-%m-%d')
image.png
image.png

image.png

(三)、字符串转为datetime str→datetime

将str转成日期时间类型有三种常用方法:一个是与strftime互逆的strptime方法、以及dateutil包的parse方法、还有pandas的to_datetime方法。

1、strptime:解析已知格式的时间

value = '2011-01-03'
datetime.strptime(value, '%Y-%m-%d')
image.png

2、dateutil包中的parser.parse方法

from dateutil.parser import parse
parse('2011-01-03')
image.png

dateutil.parse的优点:不用你显示的给定编码格式,可以解析几乎所有人类能够理解的日期表示形式

parse('Jan 31, 1997 10:45 PM')
image.png

在国际通用的格式中,日出现在月的前面很普遍,传入dayfirst=True(默认值为False)即可解决这个问题.

parse('6/12/2011', dayfirst=True)

image.png

注意:parser是一个实用但不完美的工具。比如说,它会把一些原本不是日期的字符串认作是日期(比如"42"会被解析为2042年的今天)。

3、pandas包的to_datetime方法

to_datetime方法可以解析多种不同的日期表示形式。对标准日期格式(如ISO8601)的解析非常快:

import pandas as pd
datestrs = ['2011-07-06 12:00:00', '2011-08-06 00:00:00']
pd.to_datetime(datestrs)
image.png

它还可以处理缺失值(None、空字符串等):

idx = pd.to_datetime(datestrs + [None])
idx
image.png

其中第三个元素为NaT:Not a Time。是pandas中时间戳数据的null值。

四、datetime时间差计算

timedelta:表示两个datetime之间的差(日、秒、毫秒)

# datetime相减
datetime(2019,1,7) - datetime(2021,6,24,8,15)
# datetime加timedelta
datetime(2021,1,7)+timedelta(12)

五、两个函数都涉及日期时间的格式化字符串,列举如下:

%a 星期几的简写;如 星期三为Web
%A 星期几的全称;如 星期三为Wednesday
%b 月份的简写; 如4月份为Apr
%B 月份的全称; 如4月份为April
%c 标准的日期的时间串;(如: 04/07/10 10:43:39)
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
%U 第年的第几周,把星期日做为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号

参考文章:
https://blog.csdn.net/Asher117/article/details/85709839
https://www.cnblogs.com/chenqionghe/p/12235277.html

扩展:如何将datetime转化为年月


image.png

你可能感兴趣的:(python中datetime和字符串相互转换)