Python基础知识之Datetime

本篇文章将介绍一下Datetime相关的使用

data

我们首先来看date的使用

import datetime

d = datetime.date(2018,8,2)
print(d) # 2018-08-02

在这里需要注意的是如果date里面写成(2018,08,02)是会报错的

如何获取当前时间

import datetime

tday = datetime.date.today()
print(tday) # 2018-12-16
print(tday.year) # 2018
# 当然这里我们去打印它的年月日都可以,在这里就不一一展示了
print(tday.weekday()) # 这里获取的是6,其实应该是7
# 那么很多小伙伴会在这里进行+1操作,其实不必,这里为我们提供了一个isoweekday()方法
print(tday.isoweekday()) #7

如何获取一周以后的时间

import datetime

tday = datetime.date.today() # 2018-12-16
week_later_day = datetime.timedelta(days=7)
print(tday+week_later_day) # 2018-12-23

如何获取距离某个特殊日子的时间

import datetime

tday = datetime.date.today()
# 假如我的生日是12月30日
birthday = datetime.date(2018,12,30)
print(birthday-tday) # 14 days, 0:00:00
# 那如果是多少秒呢?很多小伙伴估计会*24*60*3600,实际上我们没有必要这么做,它为我们提供了一个total_seconds()方法
print((birthday-tday).total_seconds()) # 1209600.0

time

time的使用

import datetime

tday = datetime.time(12,30,41)
print(tday) # 12:30:41
# 当然这里我们也可以输出小时、分钟、秒,如果我们输出年月日就会报错,time模块不支持该方法
print(tday.hour) #12

time和data的区别

从上面的例子中不难看出,data针对的是年月日的操作,而time针对的是时分秒的操作

而我们平时工作中用的比较多的是datetime模块,它是将两个模块的属性进行了统一,这个时候我们就可以调用它的年月日时分秒中每一个属性,不会报错

import datetime

tday = datetime.datetime(2018,12,16,12,30,45)
print(tday) # 2018-12-16 12:30:45

strftime()与strptime()

strftime()是将日期格式转化成字符串

import datetime

tday = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(tday) # 2018-12-16 12:45:10

tday = datetime.datetime.now().strftime("%b-%d-%y %H:%M:%S")
print(tday) # Dec-16-18 12:46:52
import datetime

tday = datetime.datetime.strptime('Dec-16-18 12:46:52','%b-%d-%y %H:%M:%S')
print(tday) # 2018-12-16 12:46:52

以上就是datetime的基本使用,接下来介绍几个在实际工作中遇到的问题该怎么去解决

从当前的时间减去一天

import datetime

tday = datetime.date.today() # 2018-12-16
tdelta = datetime.timedelta(days=1) #当然这里的days也可以为-1,相应的就变为tday+tdelta
print(tday-tdelta) # 2018-12-15

计算最近2个月的时间

import datetime
from dateutil.relativedelta import relativedelta
print(datetime.date.today() + datetime.timedelta(2*365/12)) # 2019-02-14
print(datetime.date.today() + relativedelta(months=2)) # 2019-02-16

这里我为了让大家看到上面那种计算是有误差的,我就选了2个月来进行区分,因为上面那种方法没有考虑哪一月有多少天

我们在做爬虫的时候经常会遇到类似时间格式的字符串“20181216123045”,这种如何将它变为常见的日期格式呢?

import datetime

from dateutil.parser import parse
t = '20181216123045'

print(parse(t).strftime('%Y-%m-%d %H:%M:%S')) # 2018-12-16 12:30:45

当我们得到这样的结果是非常高兴地,至少我在第一次用到这种方法的时候蛮开心的

有时候工作中会将在一个固定时间增加30s,我们该怎么做?

import datetime

a = datetime.datetime(2018,12,16,13,15,15)
b = a + datetime.timedelta(seconds=30)
print(b) # 2018-12-16 13:15:45
b = a + datetime.timedelta(seconds=50)
print(b) # 2018-12-16 13:16:05

如何找出每个月的最后一天?

大家可能首先会新建一个dict然后在里面写上每个月对应的天数,然后判断当前是第几月,然后再使用dict里面的值,这种方法就显得比较繁复,今天给大家带来一个比较好的方法

import datetime
def last_day_month(any_day):
    next_month = any_day.replace(day = 28) + datetime.timedelta(days=4)# 这里要考虑2月有28天,随便加几天但是要保证能够凑到31天,这里可以是4,5,6.....
    print(next_month) # 第一次2018-03-04 第二次2019-01-01
    print(next_month.day) # 第一次4 第二次1
    return next_month-datetime.timedelta(days=next_month.day)# 这里比较关键的一点就是要把多余的天数给减掉
print(last_day_month(datetime.date(2018,2,17))) # 2018-02-28
print(last_day_month(datetime.date(2018,12,16))) # 2018-12-31

猜你喜欢

转载自blog.csdn.net/ALLENsakaru/article/details/85029949
今日推荐