python时间模块 datetime (datetime、timedelta和timezone部分)

本文承接前文:https://blog.csdn.net/weixin_44013214/article/details/103116581
本文介绍时间模块datetime的剩余部分的内容

datetime类

datetime类是一个单独的类,包含了date类和time类的所有方法和属性,可以看成是date类和time类的组合

class datetime.datetime(year,month,day,hour=0,minute=0,second=0,microsecond=0,
tzinfo=None,*,fold=0)
:对于datetime对象,参数year,month,day是必须有的,其他参数是可选的.
参数范围

参数范围
year[datetime.MINYEAR, datetime.MAXYEAR]
month[1, 12]
day1–28,29,30,31(根据实际年份月份确定)
hour[0, 24)
minute[0, 60)
second[0, 60)
microsecond[0, 1000000)
类方法(classmethod)

datetime.today()

  • 作用:返回一个无tzinfo的当前日期时间的datetime对象

datetime.now(tz=None)

  • 作用:返回一个当前日期时间的datime对象,若tz=None,则和datetime.today()一样的结果;同时,设置参数tz的值必须是timezone对象或者是基于tzinfo的类对象。
from datetime import datetime,timezone,timedelta
datetime.today()
# datetime.datetime(2019, 11, 19, 10, 15, 6, 361685)
datetime.now()
# datetime.datetime(2019, 11, 19, 10, 15, 15, 876817)
datetime.now(tz=timezone(timedelta(seconds=14400))
# datetime.datetime(2019, 11, 21, 5, 27, 14, 794799, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))

datetime.utcnow()

  • 作用:返回一个无tzinfo的UTC时区的日期时间.
datetime.utcnow()
# datetime.datetime(2019, 11, 21, 4, 6, 41, 56739)

datetime.fromtimestamp(timestamp, tz=None)

  • 作用:将一个时间戳转化为一个datetime对,可以根据需要设置tz参数来设置时区信息
  • 参数timestamp: 时间戳 ; 参数tz: 时区信息,tzinfo对象

datetime.utcfromtimestamp(timestamp)

  • 作用:将时间戳转化为UTC时区 的datetime对象
  • 参数 timestamp:时间戳
import time
from datetime import datetime, timezone, timedelta
datetime.fromtimestamp(time.time())
# datetime.datetime(2019, 11, 21, 12, 17, 5, 313839)
datetime.fromtimestamp(time.time(), tz=timezone(timedelta(hours-8)))
# datetime.datetime(2019, 11, 21, 12, 13, 46, 926916, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
# datetime.utcfromtimestamp(time.time())
# datetime.datetime(2019, 11, 21, 4, 32, 5, 891002)

datetime.fromordinal(ordinal)

  • 作用:将一个相对于公元1年1月1日的序数,转化为对应的datetime对象,datetime对象的时间部分为0
  • 参数 ordinal:整数,对于datetime对象或date对象可通过datetime.toordinal(year, month, day)或date.toordinal(year, month, day)获得.
from datetime import date, datetime
d = date(2019, 11, 10)
dt = datetime(2019, 11, 11, 12, 12, 42)
d_ordinal = d.toordinal()
# d_ordinal = 737373
dt_ordinal = dt.toordinal()
# dt_ordinal = 737374
datetime.fromordinal(d_ordinal)
# datetime.datetime(2019, 11, 10, 0, 0)
datetime.fromordinal(dt_ordinal)
# datetime.datetime(2019, 11, 11, 0, 0)

datetime.combine(date, time, tzinfo=self.tzinfo)

  • 作用:将datetime.date对象和datetime.time对象合并成一个datetime对象.
  • 参数:
    - date:datetime.date对象
    - time:datetime.time对象
    - tzinfo:若有提供tzinfo参数则会使用该值;否则会使用time对象的tzinfo属性.
from datetime import date, time, datetime, timezone, timedelta
d = date(2019, 11, 21)
t = time(12, 52, 52, tzinfo=timezone(timedelta(hours=4)))
datetime.combine(d, t)
# datetime.datetime(2019, 11, 21, 12, 52, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
datetime.combine(d, t, tzinfo=timezone(timedelta(hours=8)))
# datetime.datetime(2019, 11, 21, 12, 52, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))

datetime.strptime(date_string, format)

  • 作用:将指定格式的时间日期字符串转化为datetime对象
  • 参数
    - date_string:格式为参数format设置的日期时间字符串
    - format:格式设置字符
    等价于:datetime.datetime(*(time.time.strptime(date_string, format)[0:6]))
date_string = "2019-11-21 12:52:52"
format1 = "%Y-%m-%d %H:%M:%S"
datetime.strptime(date_string, format1)
# datetime.datetime(2019, 11, 21, 12, 52, 52)
类属性(class attributes)

datetime.min:返回 datetime.datetime(MINYEAR, 1, 1, tzinfo=None)
datetime.max:返回 datetime.datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)
datetime.resolution:返回两个互不相等的datetime对象的最小差值,即
datetime.timedelta(microseconds=1)

from datetime import datetime
datetime.min
# datetime.datetime(1, 1, 1, 0, 0)
datetime.max
# datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
datetime.resolution
# datetime.timedelta(microseconds=1)
实例属性(instance attributes)
属性返回结果内容
datetime.year年份
datetime.month月份
datetime.day
datetime.hour小时
datetime.minute分钟
datetime.second
datetime.microsecond毫秒
datetime.tzinfo时区信息
实例方法(instance methods)

datetime.date():返回一个date对象,包含datetime对象的日期部分datetime.time():返回一个time对象,包含datetime对象的时间部分,不含tzinfo
datetime.timetz():返回一个time对象,包含datetime对象的时间部分,含tzinfo

from datetime import datetime, timezone, timedelta
dt =datetime(2019, 11, 21, 13, 29, 52, tzinfo=timezone(timedelta(hours=8)))
dt.date()
# datetime.date(2019, 11, 21)
dt.time()
# datetime.time(13, 29, 52)
dt.timetz()
# datetime.time(13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))

datetime.replace(year, month, day, hour, minute, second, microsecond, tzinfo)

  • 作用:通过传入相应的参数的值,改变datetime对象的对应值,返回一个全新的datetime对象(原datetime的值不会改变);若不传入值,则返回datetime的原值,
dt.replace()
# datetime.datetime(2019, 11, 21, 13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
dt.replace(year=2018)
# datetime.datetime(2018, 11, 21, 13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
dt  # 原值不改变
# datetime.datetime(2019, 11, 21, 13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))

datetime.astimezone(tz=None)

  • 作用:将datetime对象转化为对应的时区tz的日期时间,返回一个新的datetime对象。
  • 参数 tz:需要得到的时区;若为None,返回系统的所在的当前时区
from datetime import timezone, timedelta
dt = datetime(2019, 11, 21, 13, 29, 52, tzinfo=timezone(timedelta(hours=8)))  # 中国标准时间
dt2 = datetime(2019, 11, 21, 13, 29, 52, tzinfo=timezone.utc)  # UTC时区
dt.astimezone()
# datetime.datetime(2019, 11, 21, 13, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), '中国标准时间'))
dt2.astimezone(tz=timezone(timedelta(hours=8)))  # 将dt2转化为中国标准时间
# datetime.datetime(2019, 11, 21, 21, 29, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))

datetime.timetuple()

  • 作用:将datetime对象转化为一个当前时区的时间元组(struct_time),返回一个time.struct_time对象

datetime.utctimetuple()

  • 作用:将datetime对象转化为一个UTC时区的时间元组(struct_time),返回一个time.struct_time()对象
dt.timetuple()
# time.struct_time(tm_year=2019, tm_mon=11, tm_mday=21, tm_hour=13, tm_min=29, tm_sec=52, tm_wday=3, tm_yday=325, tm_isdst=-1)
dt.utctimetuple()
# time.struct_time(tm_year=2019, tm_mon=11, tm_mday=21, tm_hour=5, tm_min=29, tm_sec=52, tm_wday=3, tm_yday=325, tm_isdst=0)

datetime.toordinal()

  • 作用:将datetime对象转化为相对于公元1年1月1日的序数
dt.toordinal()
# 737384

datetime.timestamp()

  • 作用:将datetime对象转化为对应的时间戳
dt.timestamp()
# 1574314192.0

datetime.weekday()

  • 作用:得到datetime对象所在一周中的第几天,范围:[0, 6]

datetime.isoweekday()

  • 作用:得到datetime对象所在ISO周中的第几天,范围:[1, 7]

datetime.isocalendar()

  • 作用:将datetime对象转化为一个元组类型(ISO year, ISO week number, ISO weekday).
dt.weekday()
# 3
dt.isoweekday()
# 4
dt.isocalendar()
# (2019, 47, 4)

datetime.isoformat(sep=‘T’, timespec=‘auto’)

  • 作用:将datetime对象转化为ISO格式的日期时间字符串
  • 参数:
    - sep:日期部分与时间部分的连接符,须是unicode 对象
    - timespec:时间部分显示的模式选择
timespecformat
auto根据time对象的时间内容,自动选择下面的模式
hoursHH
minutesHH:MM
secondsHH:MM:SS
microsecoondsHH:MM:SS.ffff
millisecondesHH:MM:SS.sss

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

dt.isoformat(sep='-', timespec="auto")
# '2019-11-21-13:29:52+08:00'
dt.isoformat(sep='>', timespec="minutes")
# '2019-11-21>13:29+08:00'

datetime.utcoffset():根据datetime对象的tzinfo,返回与UTC时区的时间偏移量,为timedelta对象
datetime.dst():根据datetime对象的tzinfo,返回是否夏令时
datetime.tzname():根据datetime对象的tzinfo,返回时区名称

dt.utcoffset()
# datetime.timedelta(seconds=28800)
dt.dst()
# None
dt.tzname()
# 'UTC+08:00'

timedelta类

timedelta类表示一个时间间隔值,即两个日期或时间的时间差值
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
:所有参数都是可选的,可以是int或float类型的数值,也可以是蒸熟或者负数。同时,传入参数后,timedelta只会存储days,seconds,microseconds三个参数的内容,对其他参数,会进行相关的运算转化,如下:

  • 1 millisecond = 1000 microseconds
  • 1 minute = 60 seconds
  • 1 hour = 3600seconds
  • 1 week = 7days

days, seconds, microseconds参数的取值范围:

  • 0 <= microseconds < 1000000
  • 0 <= seconds < 3600*24 (一天的总秒数)
  • 999999999 <= days <= 999999999
from datetime import timedelta
timedelta(days=1, seconds=20, microseconds=232, milliseconds=999, minutes=2, hours=2, weeks=7)
# datetime.timedelta(days=50, seconds=7340, microseconds=999232)
timedelta(microseconds=-1)
# datetime.timedelta(days=-1, seconds=86399, microseconds=999999)
类属性(class atrributes)

timedelta.min:返回最小的负数timedelta对象,即timedelta(-999999999)
timedelta.max:返回最大的正数timedelta对象,即timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999).
timedelta.resolution:返回两个会不相等的timedelta对象的最小差值,即timedelta(microseconds=1)

实例属性(instance atrributes)
属性值范围
days[-999999999, 999999999]
seconds[0, 86399]
microseconds[0, 999999]
实例方法(instance methods)

timedelta.total_seconds()
- 作用:将timedelta对象转化为秒

td = timedelta(days=1, seconds=20, microseconds=232, milliseconds=999, minutes=2, hours=2, weeks=7)
td.total_seconds()
# 4327340.999232

timezone类

timezone类继承与基类tzinfo,它的每个实例都表示一个由UTC的固定偏移量定义的时区。
class datetime.timezone(offset, name=None)

参数说明
offsettimedelta类型,与UTC时区的时间间隔,范围:[-timedelta(hours=24), timedelta(hours=24)]
name可选参数,字符串类型,设置时区的名称,可以被datetime对象通过实例方法tzname()获取。

类属性

timezone.utc:表示为UTC时区,即timezone(timedelta(0))

from datetime import datetime, timezone, timedelta
tz1 = timezone(timedelta(hours=3), name='East 3')
dt = datetime(2019, 11, 21, 15, 12, 52, tzinfo = tz1)
# dt = datetime.datetime(2019, 11, 21, 15, 12, 52, tzinfo=datetime.timezone(datetime.timedelta(seconds=10800), 'East 3'))
dt.tzname()
# 'East 3'
timezone.utc
# datetime.timezone.utc

总结:

本文及前文只是对时间模块datetime 中的相关类的属性和方法进行介绍,datetime模块还可以进行相关的算术运算,可以参考python官方文档进行了解。

笔者水平有限,若有错误,欢迎评论指出。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python datetime模块是用于处理日期和时间模块。它提供了各种类和函数来处理日期、时间时间间隔、时区等。 datetime模块中最常用的类是datetime类,它表示一个日期和时间的对象。datetime类的构造函数可以接受年、月、日、时、分、秒和微秒等参数,也可以从字符串中解析出日期和时间。 下面是一些常用的datetime类的方法: - datetime.today():返回表示当前日期和时间datetime对象。 - datetime.now():返回表示当前日期和时间datetime对象,可选参数tz指定时区。 - datetime.strptime(date_string, format):将字符串解析为datetime对象,format指定字符串的格式。 - datetime.strftime(format):将datetime对象格式化为字符串,format指定输出的格式。 - datetime.date():返回datetime对象的日期部分,即date对象。 - datetime.time():返回datetime对象的时间部分,即time对象。 - datetime.replace(year, month, day, hour, minute, second, microsecond):返回一个新的datetime对象,替换指定的年、月、日、时、分、秒和微秒。 - datetime.timedelta(days, seconds, microseconds, milliseconds, minutes, hours, weeks):表示一个时间间隔,可以用来进行日期的加减。 除了datetime类,还有date、time和timedelta等类,它们分别表示日期、时间时间间隔。例如,date类的构造函数可以接受年、月、日等参数,可以从datetime对象中获取日期部分,还提供了strftime和timedelta等方法。time类和datetime类类似,但只表示时间部分timedelta类表示时间间隔,可以进行加减运算。 datetime模块还提供了timezone类,用于表示时区信息。可以通过pytz模块获取时区信息,然后使用timezone类创建时区对象。datetime对象可以使用astimezone方法转换时区。 下面是一些常用的timezone类的方法: - timezone.utc:表示UTC时区。 - timezone(timedelta, name=None):表示偏移量为timedelta的时区,可选参数name指定时区的名称。 - pytz.timezone(name):获取名称为name的时区对象。 - tzinfo.utcoffset(dt):返回datetime对象dt在该时区下的UTC偏移量。 - tzinfo.dst(dt):返回datetime对象dt在该时区下的夏令时偏移量。 总之,datetime模块提供了丰富的功能和灵活的接口,可以方便地处理日期和时间相关的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值