python时间模块 datetime(date和time部分)

datetime 实在time模块的基础上进行优化和改进,更好的使用。

datetime主要包含以下几个内容

  • date:日期类(year,month,day)
  • time:时间类(hour, minute,second,microsecond,tzinfo,*fold)
  • datetime:日期时间,可以看成是date和time的组合,同时继承了他们的大部分方法和属性
  • timedelta:表示两个时间对象(date对象或time对象)的时间间隔,精确到毫秒
  • tzinfo:时区信息的基类,datetime和time类使用它们来提供可定制的时间调整概念(例如,考虑时区和/或夏令时)。
datetime中的两个常量:

datetime.MINYEAR: date或time对象允许的最小年,为 1.
datetime.MAXYEAR: date或time对象允许的最大年,为 9999.

以下分别介绍上面几个内容的常用的方法和属性

date类

date对象表示理想日历中的日期(年、月和日)
datetime.date(year,month,day)

参数范围
yeardatetime.MINYEAR----datetime.MAXYEAR
month1—12
day1—28/29/30/31(根据实际年份和月份确定)
类方法(class methods)

date.today()

  • 作用:返回当前时区的日期
  • 等价于date.fromtimestamp(time.time())
from datetime import date
date.today()
# 结果
# datetime.date(2019, 11, 18)

date.fromtimestamp(timestamp)

  • 作用:根据给定的时间戳timestamp ,放回当前时区对应的date对象
import time
from datetime import date
date.fromtimestamp(time.time())
# 结果
# datetime.date(2019, 11, 18)

date.fromordinal(ordinal)

  • 作用:返回一个date对象,序数ordinal是相对于公元1年1月1日的整型数。
  • ordinal的范围:(1,date.max.toordinal());date.max.toordinal()即datetime.date(9999, 12, 31)的序数
from datetime import date
ordinal = date.today().toordinal()
# ordinal = 737381
date.fromordinal(ordinal-1)
# 结果
# datetime.date(2019, 11, 17)

date.fromisoformat(date_string)

  • 作用:将格式为“YYYY-MM-DD”的日期字符串转化为一个date对象
  • date_string:’‘YYYY-DD-MM’'形式的字符串
    注: 该方法是在python 3.7加入的,运行请确保是在3.7以上的环境中
from datetime import date
date_string = '2019-11-11'
date.fromisoformat(date_string)
# 结果
# datetime.date(2019, 11, 11)

date.fromisocalendar(year,month,day)

  • 作用:返回一个date,对应的ISO(国际标准化组织)日历日期指定的年,周和天
    : python3.8新添加
类属性(class attributes)

date.min:返回 datetime.date(1, 1, 1)
date.max:返回 datetime.date(9999,12,31)
date.resolution: 两个不等date对象存在的最小差值,即datetime.datedelta(days=1)

实例属性(instance attributes)

date.year: 返回date对象的year值
date.month: 返回date对象的month值
date.day: 返回date对象的day值

from datetime import date
d = date(2019,11,19)
# datetime.date(2019, 11, 19)
d.year
# 2019
d.month
# 11
d.day
# 19
实例方法(instance methods)

date.replace(year, month, day)

  • 作用:返回一个实例对象date的日期,若year,month,day被改变,则返回改变的日期(不改变原实例对象的值)
from datetime import date
d = date(2019,11,11)
d.replace()
# datetime.date(2019,11,11)
d.replace(year=2018)
# datetime.date(2018,11,11)
d
# datetime.date(2019,11,11)

date.timetuple()

  • 作用:将实例对象date转化成一个时间元组(time.struct_time)对象,但其时间部分的值全为0.
d.timetuple()
# time.struct_time(tm_year=2019, tm_mon=11, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=315, tm_isdst=-1)

date.toordinal()

  • 作用:返回相对于公元1年1月1日的序数.
d.toordinal()
# 737374

date.weekday()

  • 作用:返回一周中的第几天,范围:0-6(Monday>>>0;Sunday>>>6)
    date.isoweekday()
  • 作用:返回ISO标准的一周中的第几天,范围:1-7(Monday>>>1;Sunday>>>7)
d.weekday()
# 0
d.isoweekday()
# 1

date.isocalendar()

  • 作用:将实例化对象date转化为一个元组;
    返回一个元组(ISO year,ISO week number, ISO weekday)
    表示year年的第week number 周的 weekday。

:国际标准化组织规定,一年份由52或53个完整的星期组成,其中一个星期从星期一开始到星期天结束。ISO年份的第一周是包含星期四的一年的第一个公历周。这被称为第一周,那个星期四的ISO年份与其公历年份相同。

d.isocalendar()
# (2019, 46, 1)

date.isoformat()

  • 作用:将实例化对象date转化为ISO格式(“YYYY-MM-DD”)的日期字符串
d.isoformat()
# '2019-11-11'

date.strftime(format)

  • 作用:将实例化对象date转化为指定格式(format)的字符串,若涉及到时间部分,则时间部分的值全为0.
d.strftime('%Y-%m-%d %H:%M:%S')
# '2019-11-11 00:00:00'

time类

time类表示(当地)一天中的时间部分,独立于任何特定的日期,可以同tzinfo进行时区调整
class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *)

参数范围
hour0 <= hour < 24
minute0 <= minute < 60
second0 <= second < 60
microsecond0 <= microsecond < 1000000

tzinfo:一般是时间的偏移量offsettime,可通过datetime.timezone(datetime.timedelta(seconds))赋值

类属性(class attributes)

time.min: 可表示的最早时间;即datetime.time(0, 0)
time.max: 可表示的最晚时间;即datetime.time(23, 59, 59, 999999)
time.resolution: 两个不同time对象的最小差值,即datetime.timedelta(microseconds=1)

from datetime import time
time.min
# datetime.time(0, 0)
time.max
# datetime.time(23, 59, 59, 999999)
time.resolution
# datetime.timedelta(microseconds=1)
类方法(classmethod)

time.fromisoformat(time_string)

  • 作用:将ISO格式(“HH:MM:SS:ffff”)的时间字符串转化为一个time对象
from datetime import time
time.formisoformat('16:23:58')
# datetime.time(16, 23, 58)
time.formisoformat('16:24:03+04:00')  # 加上一个偏移量,使得结果出现tzinfo 的内容
# datetime.time(16, 24, 3, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
实例属性(instance attributes)

time.hour:返回实例化对象time的hour值
time.minute:返回实例化对象time的minute值
time.second:返回实例化对象time的second值
time.microsecond:返回实例化对象time的microsecond值
time.tzinfo:返回实例化对象time的时区信息

from datetime import time
t = time(16, 15, 14, 668)
t.hour
# 16
t.minute
# 15
t.second
# 14
t.microsecond
# 668
实例方法(instance methods)

time.replace(hour, minute, second, microsecond, tzinfo)

  • 作用:返回一个实例对象time的时间,若参数被改变,则返回改变的时间(不改变原实例对象的值)
from datetime import time
import datetime
t = time(16, 15, 14, 668, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
t.replace()
# datetime.time(16, 15, 14, 668, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
t.replace(hour=11, minute=11,second=11,tzinfo=datetime.timezone(datetime.timedelta(seconds=10000)))
# datetime.time(11, 11, 11, 668, tzinfo=datetime.timezone(datetime.timedelta(seconds=10000)))
t
# datetime.time(16, 15, 14, 668, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))

time.isoformat(timespec=‘auto’)

  • 作用:将实例化对象time转化为ISO 格式的时间字符串,
  • 参数 timespec:根据不同值转化的不同的ISO时间格式
timespecformat
auto根据time对象的时间内容,自动选择下面的模式
hoursHH
minutesHH:MM
secondsHH:MM:SS
microsecoondsHH:MM:SS.ffff
millisecondesHH:MM:SS.sss

注:除了milliseconds,其他模式,若出现了时间偏移量offsetime,则需要加上偏移量

t = time(16, 15, 14, 668, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
t.isoformat(timespec='auto')
# '16:15:14.000668+04:00'
t.isoformat(timespec='hours')
# '16+04:00'
t.isoformat(timespec='minutes')
# '16:15+04:00'
t.isoformat(timespec='seconds')
# '16:15:14+04:00'
t.isoformat(timespec='microseconds')
# '16:15:14.000+04:00'
t.isoformat(timespec='milliseconds')
# '16:15:14.000668+04:00'

time.strftime(format)

  • 作用:将实例化对象time转化为指定格式(format)的字符串,涉及日期部分,则为1900年1月1日
    提示:对于datetime中所有的类方法strftime()的默认值为 1900-01-01T00:00:00.000
from datetime import time
t1 = time(17, 11, 45, 552266)
t1.strftime('%Y-%m-%d %H:%M:%S')
# '1900-01-01 17:11:44'

接下来的方法主要是针对time对象中的tzinfo参数,若tzinfo = None,则结果就返回None
time.utcoffset():返回实例化对象中与UTC的时间偏移量
time.dst():返回实例化对象time的夏时令
time.tzname() :返回实例化对象time的时区名称

from datetime import time
import datetime
t = time(11, 11, 11, 668, tzinfo=datetime.timezone(datetime.timedelta(seconds=10000)))
t.utcoffset()
# datetime.timedelta(seconds=10000)
t.dst()
# None
t.tzname()
# 'UTC+02:46:40'

想了解更多,可以参考官方文档:https://docs.python.org/3/library/datetime.html

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值