相关文章推荐
小胡子的沙发  ·  有没有可能Java ...·  1 周前    · 
另类的路灯  ·  how to add external ...·  7 月前    · 
奔跑的鼠标垫  ·  Vicuna 13B(Vicuna ...·  1 年前    · 


日期格式转换不外乎就是日期格式-字符串格式-数值格式之间的相互转换,以及相同格式的不同形式间的转换,最常用的是datetime模块,下面直接举例子说明如何进行转换。
1. 日期时间格式转字符

首先获取当天日期

from datetime import datetime
today = datetime.today()
print(today)
#datetime.datetime(2018, 9, 8, 22, 32, 46)

返回结果分别包含年月日时分秒,代表当前的日期时间,这是最常见的日期时间格式,在DataFrame的显示形式是“2018-09-08 22:32:46”,假如我们要把日期转换为字符串形式“2018-09-08”或“20180908”等,就要用到datetime的内置strftime函数。

today.strftime('%Y-%m-%d')
#'2018-09-08'
today.strftime('%Y%m%d')
#'20180908'
today.strftime('%Y-%m')
#'2018-09'

strftime接受日期时间格式参数,完全靠格式化参数控制要显示的日期或时间格式。
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称

2. 字符转日期时间
假如要把字符‘2018-09-08’转为日期有两种比较常用的方法。
第一种方法用datetime模块的strptime函数:

datetime.strptime('2018-09-08','%Y-%m-%d')
#datetime.datetime(2018, 9, 8, 0, 0)

strptime函数接受两个参数,第一个是要转换的字符串日期,第二个是日期时间的格式化形式。
第二种方法可以借助pandas模块里面的to_datetime函数:

import pandas as pd
pd.to_datetime('2018-09-08')
#Timestamp('2018-09-08 00:00:00')
pd.to_datetime('201909',format='%Y%m')
#Timestamp('2019-09-01 00:00:00')

to_datetime函数常用的参数有两个,第一个是要转换的字符日期时间格式,第二个是该字符日期时间的格式化形式,对于简单的时间格式第二个参数format可以省略,to_datetime会自动识别,复杂一点的时间格式需要指定format。

3.数值转日期

这种情况一般发生在,数据库或者我们导入Python的数据该日期时间字段是以数值格式储存的,这时需要把它转为日期时间格式以方便后续的应用。
数值转日期只需先把数值转换为字符,再用上面介绍的字符转日期处理就可以了。

dt = 20180908
datetime.strptime(str(dt),'%Y%m%d')
#datetime.datetime(2018, 9, 8, 0, 0)

讲到这里其实日常用到的大部分日期时间处理都可以应付了,Python里面可以处理时间的模块很多,这里推荐一下arrow模块,有兴趣的小伙伴可以自己查一下使用教程,个人觉得比datetime模块还要简单粗暴。