一 Python 中 日期类型 与字符串互转的问题
1 字符串 转成 datetime 类型
# 函数 datetime.datetime.strptime()
def strptime(cls, date_string, format):pass 这个函数 需要传入两个参数 date_string 即日期字符串, format 即日期的格式
看下面代码, 很方便就能把str 转成 datetime 类型
import datetime
datestr1='2017-03-28'
datestr2='2017-03-31'
date1 = datetime.datetime.strptime(datestr1, '%Y-%m-%d')
date2 = datetime.datetime.strptime(datestr2, '%Y-%m-%d')
日期差值
diff_days = (date2 -date1).days
datetime.datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
2 datetime 类型 转成 字符串
# 函数 datetime.datetime.strftime() 看下 声明
def strftime(self, fmt: Union[str, unicode]) -> str: ...
dt1 = datetime.datetime.strptime("2012-10-12 21:08:12", "%Y-%m-%d %H:%M:%S")
dt2 = datetime.datetime.strptime("2012-09-12 21:08:12", "%Y-%m-%d %H:%M:%S")
import datetime
date = datetime.datetime.now()
datestr = date.strftime('%Y-%m-%d')
datestr2 = str(date)
dt,_ =datestr2.split('.')
结果如下:
datestr
'2018-03-03'
datestr2
'2018-03-03 17:12:13.383474'
dt
'2018-03-03 17:12:13'
#Python时间日期操作大全
http://blog.csdn.net/yl2isoft/article/details/52077991
常用的格式 符号
字符串 ---》 datetime
datetime.datetime.strptime(time_str, fmt)
%a 星期几的简写 Weekday name, abbr.
%A 星期几的全称 Weekday name, full
%b 月分的简写 Month name, abbr.
%B 月份的全称 Month name, full
%c 标准的日期的时间串 Complete date and time representation
%d 十进制表示的每月的第几天 Day of the month
%H 24小时制的小时 Hour (24-hour clock)
%I 12小时制的小时 Hour (12-hour clock)
%j 十进制表示的每年的第几天 Day of the year
%m 十进制表示的月份 Month number
%M 十时制表示的分钟数 Minute number
%S 十进制的秒数 Second number
%U 第年的第几周,把星期日做为第一天(值从0到53)Week number (Sunday first weekday)
%w 十进制表示的星期几(值从0到6,星期天为0)weekday number
%W 每年的第几周,把星期一做为第一天(值从0到53) Week number (Monday first weekday)
%x 标准的日期串 Complete date representation (e.g. 13/01/08)
%X 标准的时间串 Complete time representation (e.g. 17:02:10)
%y 不带世纪的十进制年份(值从0到99)Year number within century
%Y 带世纪部分的十制年份 Year number
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。Name of time zone
%% 百分号
二 日期相加减的问题
首先 常用的换算关系
millisecond = 1000 microseconds
minute = 60 seconds
hour = 3600 seconds
week = 7 days
在datetime模块,有一个类 timedelta 来进行日期的相加减操作
扫描二维码关注公众号,回复:
2015255 查看本文章
from datetime import datetime,date,time,timedelta
dt = datetime(2018, 3, 1, 19, 40, 30)
dt = datetime(2018, 3, 1, 19, 40, 30, 356102)
#1. 一个日期 向前或向后推迟几天
dt2 = dt + timedelta(days=5)
dt2 = dt - timedelta(days=5)
dt3 = dt + timedelta()
#2 一个日期 向前或向后推迟几个小时
now = datetime.now()
hours = timedelta(hours=2)
dt3=now -hours
dt3 = now + hours
#3 同理 还可以支持 seconds , milliseconds,minutes,weeks 分别是 秒 ,毫秒, 分钟, 周...
def __new__(cls, days=None, seconds=None, microseconds=None, milliseconds=None, minutes=None, hours=None, weeks=None): # known case of datetime.timedelta.__new__
pass
dt = datetime(2018, 3, 1, 19, 40, 30)
weeks = timedelta(weeks=2)
dt2 = dt + weeks
dt2 = dt - weeks
#4 注意这里不支持月份
dt = datetime(2018, 3, 1, 19, 40, 30)
dt2 = datetime(2018, 4, 15, 39, 20, 30)
my_timedelta= dt2 -dt
now = datetime.now()
hours = timedelta(hours=2)
now -hours
datetime.datetime(2018, 3, 1, 17, 57, 15, 901533)
dt3=now -hours
now
datetime.datetime(2018, 3, 1, 19, 57, 15, 901533)
dt3
datetime.datetime(2018, 3, 1, 17, 57, 15, 901533)
# 5 在timedelta 中遇到的问题 seconds 和 total_seconds() 的区别
dt = datetime(2018, 3, 1, 19, 40, 30)
hours = timedelta(hours=3)
dt2 = dt1+hours
m = dt2-dt
m.days
m.seconds
# 注意这两个 的区别 timedelta 有一个属性 seconds ,和一个函数 total_seconds()
m.seconds
timedelta.total_seconds()方法:返回该时间差 以秒为单位的值
他们是有点区别的.
如果 timedelta 是正的时间, 则这两个结果是一样的
如果 timedelta 是负的时间, 则 total_seconds() 会显示负值, 二属性 seconds 则会向前借位保证数据是正值
m2=dt-dt2
m2.seconds
75600
m2.total_seconds()
-10800.0
还有 小小的建议,如果使用datetime 模块 有两种导入方式, import xxx, from datetime import xxxx
这两种都是可以的,但是 如果在项目中 应该保持一种风格, 如果不统一,会出现覆盖类名的现象, 因为 datetime 里面有一个 datetime类,所以 使用这个模块 最好统一导入方式. datetime 模块 处理时间有很多的方便的地方, 但是 还有一些不足,比如没有计算date 之间相差月份等,一般常用的功能都有的.
参考文档:
分享快乐,留住感动. 2018-03-03 17:29:29 --frank