python内置模块datetime之datetime类

GMT时间和UTC时间区别:
http://www.malaoshi.top/show_1EF1TS4sSI6v.html

计算机中的时间

最早最成熟的计算机操作系统是unix,把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0。

在计算机中,“时间”实际上是数字,该数字是当前时间与1970年1月1日 00:00:00的 时间差,单位是秒。之后的时间是 正数,之前的时间是 负数

计算机中都以此为标准

为什么以1970年1月1日 00:00:00为基准?
因为unix是1970年前后发布的

查看

import time

t = time.time()
print(t)
print(t/60/60/24/365)

datetime模块

datetime模块是处理日期、时间的模块。(还有其他关于日期时间的内置模块,以及第三方模块)
该模块有6个类:

  1. date 日期对象,常用的属性有year, month, day
  2. time 时间对象
  3. datetime 日期时间对象,常用的属性有hour, minute, second, microsecond
  4. datetime_CAPI 日期时间对象C语言接口
  5. timedelta 时间间隔,即两个时间点之间的长度
  6. tzinfo 时区信息对象

详细参看官方文档:
https://docs.python.org/3/library/datetime.html#module-datetime

感谢中文文档:
https://blog.csdn.net/cmzsteven/article/details/64906245

导入 datetime

使用前需要导入 datetime

import datetime

datetime类

初始化

datetime.datetime(year, month, day, hour=0, minute=0, second=0)
参数说明
  • year:必须
  • month:必须。1 <= month <= 12
  • day:必须。
  • hour:0 <= hour < 24
  • minute:0 <= minute < 60
  • second:0 <= second < 60
返回

datetime对象

today()

返回当前系统时间的datetime对象

>import datetime
>datetime.datetime.today()

now([tz])

返回当前系统时间的datetime对象,可以设置时区,不设置时区,同today()

>import datetime
>datetime.datetime.now()
#设置世界统一时间utc
>datetime.datetime.now(datetime.timezone.utc)

截止到发本文时,需要用第三方模块才能调用该方法设置时区

utcnow()

返回当前时间(世界统一时间utc)的datetime对象

>import datetime
#设置世界统一时间utc
>datetime.datetime.utcnow()

格式化成字符串

格式化符号如下:

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

strftime()

将datetime对象格式化(format)成字符串

>import datetime
>datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')

解析成对象

strptime()

将字符串型的日期时间解析(parse)为datetime类对象

>import datetime
#将年月日格式化成datetime对象
>datetime.datetime.strptime('2018-01-03','%Y-%m-%d')
#将年月日时分秒格式化成datetime对象
> datetime.datetime.strptime('2018-01-03 11:23:38','%Y-%m-%d %H:%M:%S')

获取日期是 第几周、星期几

import datetime

#str 转datetime
s = '2021-1-5'
date_time = datetime.datetime.strptime(s,'%Y-%m-%d')
print (date_time)

#获取当前时间
# t_date=datetime.date.today()
# print (t_date)

#获取第几周
week = date_time.strftime("%W")
print("获取第几周:",week)
#获取星期几
week_day = date_time.strftime("%w")
print ("获取星期几:",week_day)

将一种格式的字符串格式化成另一种格式

Wed Mar 30 23:40:06 +0800 2022 格式化成 2022-03-30 23:40:06

解决思路:

  1. Wed Mar 30 23:40:06 +0800 2022 解析成 datetime 对象,解析格式:'%a %b %d %H:%M:%S %z %Y'

  2. 将 步骤1 中的 datetime 对象,格式化成 '%Y-%m-%d %H:%M:%S' 格式

代码

import datetime
s='Wed Mar 30 23:40:06 +0800 2022'
datetimeObj=datetime.datetime.strptime(s,'%a %b %d %H:%M:%S %z %Y')
res=datetimeObj.strftime('%Y-%m-%d %H:%M:%S')
print(res)

timedelta

datetime.timedelta对象代表两个时间之间的 时间差,用于日期计算

初始化

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
参数说明:

仅支持天,秒和微秒(1毫秒=1000微秒)
参数可以是整数或浮点数,并且可以是正数或负数

total_seconds()

时间间隔的总秒数,浮点型
可能为负数,过去时间减去现在(未来)时间

.total_seconds()
返回值

间隔时长,单位:秒

10小时之后的时间:

t=datetime.datetime.today()+datetime.timedelta(hours=10)
print(t)

2018-07-10 23:14:00与现在时间的间隔是多少小时

oldtime=datetime.datetime.strptime("2018-07-10 23:14:00","%Y-%m-%d %H:%M:%S")
now=datetime.datetime.today()
d=now-oldtime
snd=d.total_seconds()
snd=math.ceil(snd)
hour=snd//60//60
print("间隔%d小时"%hour)

原文出处:https://www.malaoshi.top/show_1EF1Sv8jiTcq.html