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  来进行日期的相加减操作 

 

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 之间相差月份等,一般常用的功能都有的. 


from datetime import datetime
import time  


# 时间戳 转datetime 
t   = time.time()
t
1559644733.766329
dt = datetime.fromtimestamp(t)
datetime.datetime(2019, 6, 4, 18, 38, 53, 766329)




# datetime转  时间戳 
now = datetime.now()
now
datetime.datetime(2019, 6, 4, 18, 39, 54, 860377)
now.timestamp()
1559644794.860377

 

 

 

参考文档:

http://blog.csdn.net/yl2isoft/article/details/52077991

http://blog.csdn.net/yuhentian/article/details/78167440

https://docs.python.org/2/library/datetime.html?#timedelta-objects

 

分享快乐,留住感动.   2018-03-03 17:29:29   --frank 

 

你可能感兴趣的:(python基础&进阶)