python——datetime库用法

datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1

文章目录

  • python中时间日期格式化符号:
  • datetime模块定义了5个类
    • datetime.date:表示日期的类——日期对象
    • datetime.datetime:表示日期时间的类—— 日期时间对象(最常用)
    • datetime.time:表示时间的类——时间对象
    • datetime.timedelta:表示时间间隔,即两个时间点的间隔
    • datetime.tzinfo:时区的相关信息
  • 日期计算实操
    • 获取当天时间的日期与时分秒
    • 获取上个月第一天和最后一天的日期
    • 获取时间差
    • 求出距离当前时间向前两天十小时的时间
    • 计算指定日期当月最后一天的日期和本月天数
    • 计算指定日期下个月当天的日期
    • 获得本周一至今天的时间段并获得上周对应同一时间段

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 当前时区的名称
%% %号本身

datetime模块定义了5个类

datetime.date:表示日期的类——日期对象

datetime.date(year,month,day),返回year-month-day

print(datetime.date(2021,9,13))
结果:
2021-09-13

datetime.date.today(),获取当天的年月日,返回year-month-day

print(datetime.date.today())
结果:
2021-09-13

a = datetime.date.today()
print(a.year)
print(a.month)
print(a.day)
结果:
2021
9
13

datetime.date.isocalendar(),让所使用的日期符合ISO标准,返回一个包含三个值的元组,三个值依次为:year年份,week number周数,weekday星期数(周一为1…周日为7)

print(datetime.date.today().isocalendar())
结果:
(2021, 37, 1)

datetime.date.isoformat(), 返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串;

print(datetime.date.today().isoformat())
结果:
2021-09-13

datetime.date.isoweekday(): 返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)

print(datetime.date.today().isoweekday())
结果:
1

datetime.date.strftime(format):把日期时间按照给定的format进行格式化。

print(datetime.date.today().strftime("%Y %m %d"))
结果:
2021 09 13

datetime.date.ctime(),返回英文的时间格式标准 格式如 Mon Sep 13 00:00:00 2021

print(datetime.date.today().ctime())
结果:
Mon Sep 13 00:00:00 2021

datetime.datetime:表示日期时间的类—— 日期时间对象(最常用)

datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这二个类
datetime类有很多参数,datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]),返回年月日,时分秒

datetime.datetime.now():返回当前系统时间

print(datetime.datetime.now())
结果:
2021-09-13 23:08:13.415655

datetime.datetime.ctime() 将datetime.datetime类型转化成str类型,输出:Sun Jul 28 15:47:51 2019

print(datetime.datetime.now().ctime())
结果:
Mon Sep 13 23:08:44 2021

datetime.datetime.now().date():返回当前日期时间的日期部分

print(datetime.datetime.now().date())
结果:
2021-09-13

datetime.datetime.now().time():返回当前日期时间的时间部分

print(datetime.datetime.now().time())
结果:
23:10:54.719265

datetime.datetime.utctimetuple():返回UTC时间元组

print(datetime.datetime.now().utctimetuple())
结果:
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=13, tm_hour=23, tm_min=11, tm_sec=52, tm_wday=0, tm_yday=256, tm_isdst=0)

datetime.datetime.combine(date,time):将一个date对象和一个time对象合并生成一个datetime对象:

a = datetime.datetime.now()
print(datetime.datetime.combine(a.date(),a.time()))
结果:
2021-09-13 23:14:31.712160

datetime.datetime.strftime(format):由日期格式转化为字符串格式

print(datetime.datetime.now().strftime('%b-%d-%Y %H:%M:%S'))
结果:
Sep-13-2021 23:20:10

datetime.datetime.strptime(string,format):由字符串格式转化为日期格式

print(datetime.datetime.strptime('Sep-13-2021 23:20:10', '%b-%d-%Y %H:%M:%S'))
结果:
2021-09-13 23:20:10

datetime.time:表示时间的类——时间对象

time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成
time([hour[, minute[, second[, microsecond[, tzinfo]]]]])

>>> a = datetime.time(12,20,59,899)
>>> a
datetime.time(12, 20, 59, 899)
>>> a.hour
12
>>> a.minute
20
>>> a.second
59
>>> a.microsecond
899

1.datetime.time.replace()
2.datetime.time.strftime(format):按照format格式返回时间
3.datetime.time.tzname():返回时区名字
4.datetime.time.utcoffset():返回时区的时间偏移量

datetime.timedelta:表示时间间隔,即两个时间点的间隔

timedelta类是用来计算二个datetime对象的差值的。
此类中包含如下属性:
1、days:天数
2、microseconds:微秒数(>=0 并且 <1秒)
3、seconds:秒数(>=0 并且 <1天)
days、seconds、microseconds、milliseconds、minutes、hours、weeks,且默认是0。

#求出距离当前时间向前两天十小时的时间
delta = datetime.timedelta(days = 2,hours = 2)
print(datetime.datetime.now())
print(datetime.datetime.now()-delta)
结果:
2021-09-14 11:40:27.702018
2021-09-12 09:40:27.702018

datetime.tzinfo:时区的相关信息

待补充,个人觉得没啥用

日期计算实操

获取当天时间的日期与时分秒

#获取当天时间的日期与时分秒
print(datetime.datetime.now())
#获取当天时间的日期与时分秒_方法一
print(datetime.datetime.now().date())
#获取当天时间的日期与时分秒_方法二
print(datetime.date.today())
#获取当天时间的日期与时分秒
print(datetime.datetime.now().time())
结果:
2021-09-14 11:52:52.459443
2021-09-14
2021-09-14
11:52:52.459443

获取上个月第一天和最后一天的日期

# 先获取当前时间的日期
today = datetime.date.today()
# 上个月的最后一天 即本月第一天减去一天
lastday = datetime.date(today.year,today.month,1)-datetime.timedelta(days=1)
# 上个月第一天 
firstday = datetime.date(today.year,today.month-1,1)
print(lastday)
print(firstday)
结果:
2021-08-31
2021-08-01

获取时间差

start = datetime.datetime.now()
time.sleep(2)
end = datetime.datetime.now()
print((end - start).seconds)
结果:
2

求出距离当前时间向前两天十小时的时间

可以计算: 天(days), 小时(hours), 分钟(minutes), 秒(seconds), 微秒(microseconds).

delta = datetime.timedelta(days = 2,hours = 2)
print(datetime.datetime.now())
print(datetime.datetime.now()-delta)
结果:
2021-09-14 11:40:27.702018
2021-09-12 09:40:27.702018

计算指定日期当月最后一天的日期和本月天数

# 计算当月最后一天 即下个月的第一天-天数1
def eomonth(date_object):
    # 首先得判断当前时间是否为每年的最后一个月
    if date_object.month == 12:
         # 若是12月 则year+1 ,month为1
        next_month_first_date = datetime.date(date_object.year+1,1,1)
    else:
        # 若不是12月 则month+1
        next_month_first_date = datetime.date(date_object.year, date_object.month+1, 1)
    return next_month_first_date - datetime.timedelta(1)

date = datetime.date.today()
print(eomonth(date))
print(eomonth(date).day)
结果:
2021-09-30
30

计算指定日期下个月当天的日期

# 计算当月最后一天 即下个月的第一天-天数1
def eomonth(date_object):
    # 首先得判断当前时间是否为每年的最后一个月
    if date_object.month == 12:
         # 若是12月 则year+1 ,month为1
        next_month_first_date = datetime.date(date_object.year+1,1,1)
    else:
        # 若不是12月 则month+1
        next_month_first_date = datetime.date(date_object.year, date_object.month+1, 1)
    return next_month_first_date - datetime.timedelta(1)
#计算指定日期下个月当天的日期
def edate(date_object): 
    # 首先得判断当前时间是否为每年的最后一个月
    if date_object.month == 12:    
        # 若是12月 则year+1 ,month为1,day为date_object.day 无论如何date_object.day都是小于等于31的 一月有31天不会出现bug
        next_month_date = datetime.date(date_object.year+1, 1,date_object.day)
    else:
        # 若不是12月 还需要分情况讨论 因为有大小月的情况存在 这个月的有第31天 但下个月不一定有 首先获取下个月的第一天
        next_month_first_day = datetime.date(date_object.year,date_object.month+1,1)
        # 如果所求日期下个月没有 则以下个月的最后一天代替,这里调用了获取下个月有多少天的函数
        if date_object.day > eomonth(next_month_first_day).day:
            next_month_date = datetime.date(date_object.year,date_object.month+1,eomonth(next_month_first_day).day)
        else:
            next_month_date = datetime.date(date_object.year, date_object.month+1, date_object.day)
    return next_month_date

date = datetime.date.today()
print(date)
print(edate(date))
结果:
2021-09-14
2021-10-14

获得本周一至今天的时间段并获得上周对应同一时间段

today = datetime.date.today()
this_monday = today - datetime.timedelta(today.isoweekday()-1)
last_monday = this_monday - datetime.timedelta(7)
last_weekday = today -datetime.timedelta(7)
print(this_monday)
print(today)
print(last_monday)
print(last_weekday)
结果:
2021-09-13
2021-09-14
2021-09-06
2021-09-07

你可能感兴趣的:(python学习笔记,python)