python的常用日期处理datetime模块

一 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 

猜你喜欢

转载自blog.csdn.net/u010339879/article/details/79431405