我是靠谱客的博主 紧张流沙,最近开发中收集的这篇文章主要介绍datetime --- 基本的日期和时间类型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述

timedelta对象

from datetime import timedelta
delta=timedelta(days=1,hours=2,minutes=5,seconds=5,weeks=1,microseconds=100,milliseconds=10)
#datetime.timedelta(days=8, seconds=7505, microseconds=10100)
    #1 星期会转换成7 天
    #1 毫秒会转换成1000 微秒
    #1 分钟会转换成60 秒
    #1 小时会转换成3600 秒
#days, seconds, microseconds 会经标准化处理以保证表达方式的唯一性
    #0 <= microseconds < 1000000,即:1000毫秒/1000000微秒会转换成1s
    #0 <= seconds < 3600*24 (一天的秒数)
    #-999999999 <= days <= 999999999
day=delta.days
sec=delta.seconds
microseconds=delta.microseconds#返回timedelta对象的days,seconds,microseconds属性

delta1=timedelta(days=10)
delta2=timedelta(days=3)
delta3=delta2-delta1 #减法
delta4=delta2-delta1 #加法
delta5=delta1/3      #除以一个浮点数或整数。 结果会被舍入到 timedelta 最接近的整数倍
delta6=delta2*2      #乘一个整数或者浮点数,乘浮点数时结果会被舍入到 timedelta 最接近的整数倍
f=delta1/delta2      #两个timedelta相除的到一个浮点数
i=delta1//delta2     #整除,返回int
delta7=delta1//3     #整除,返回timedelta
j=delta1%delta2      #取余,返回timedelta
q, r = divmod(delta1, delta2)#计算商(delta1//delta2)和余数(delta1%delta2),q是int, r是timedelta

sec=delta1.total_seconds()#返回时间间隔包含了多少秒
sec1=delta1/timedelta(seconds=1)
microsec=delta1/timedelta(microseconds=1)  #计算时间间隔包含了多少微秒

date对象

date 对象代表一个ISO历法中的日期(年、月和日)

from datetime import timedelta
from datetime import date

x1=date.today()#返回当前的本地日期
x2=date.fromtimestamp(10)
#类似于time.localtime()返回距离epoch初始时间秒数的当地时间的date对象  

x3=date.fromisoformat('2020-08-18')
#(字符串-->date)返回一个对应于以YYYY-MM-DD 格式给出的date_string 的date 对象
x4=x3.isoformat()
#(date-->字符串)与fromisoformat()作用相反,返回一个以ISO 格式YYYY-MM-DD 来表示日期的字符串,等价于str(x3)

x5=x3.isocalendar()
#返回一个三元元组,(ISO year, ISO week number, ISO weekday)
x6=date.fromisocalendar(2020,34,2)
#返回指定year, week 和day 所对应ISO 历法日期的date(3.8新)

x7=x3.ctime()
#返回'Tue Aug 18 00:00:00 2020'类型的字符串,等价于time.ctime(time.mktime(struct_time))
x8=x3.strftime('%y-%m-%d')
#返回一个由显式格式字符串所指明的代表日期的字符串
x9=x3.timetuple()
#返回一个time.struct_time,即time.localtime() 所返回的类型

x10=x3.toordinal()
#返回ISO历法日期对应的序号
x11=date.fromordinal(1000)
#返回给定序号的ISO历法的日期,公元1 年1 月1 日的序号为1

weekday1=x3.weekday()
#返回一个整数代表星期几,星期一为0,星期天为6
weekday2=x3.isoweekday()
#返回一个整数代表星期几,星期一为1,星期天为7

year=x3.year
day=x3.day
month=x3.month#返回特定date对象的year,month,day属性
x=x3.resolution#两个日期对象的最小间隔,timedelta(days=1)

delta=timedelta(days=-1,)
date1=x3+delta 
#如果timedelta.days > 0 则date2 将在时间线上前进,如果timedelta.days < 0 则将后退。
#timedelta.seconds 和timedelta.microseconds 会被忽略
date2=x3-delta
#如果timedelta.days > 0 则date2 将在时间线上后退,如果timedelta.days < 0 则将前进。
delta1=date1-date2
print(date1<date2)
#如果date1 的时间在date2 之前则认为date1 小于date2 
#换句话说, 当且仅当date1.toordinal() < date2.toordinal() 时date1 < date2

time对象

一个 time 对象代表某日的(本地)时间,它独立于任何特定日期

  • time 对象支持 time 与 time 的比较,当 a 时间在 b 之前时,则认为 a 小于 b
  • 如果比较的一方是简单型而另一方是感知型,则如果尝试进行顺序比较将引发 TypeError
  • 如果两个比较方都是感知型,且具有相同的 tzinfo 属性,相同的 tzinfo 属性会被忽略并对基本时间值进行比较。
  • 如果两个比较方都是感知型且具有不同的 tzinfo 属性,两个比较方将首先通过减去它们的 UTC 时差(从 self.utcoffset() 获取)来进行调整。
from datetime import timedelta,timezone,time
x=timezone(timedelta(hours=8,minutes=10),)

t=time(hour=8,minute=10,second=15,microsecond=100,tzinfo=x)
# tzinfo 可以是 None,或者是一个 tzinfo 子类(timezone)的实例
''' 0 <= hour < 24,    
    0 <= minute < 60,    
    0 <= second < 60,    
    0 <= microsecond < 1000000,    
    fold in [0, 1].'''

#返回time对象的属性
hour=t.hour
minute=t.minute
second=t.second
microsecond=t.microsecond
tzinfo=t.tzinfo   #如果 tzinfo 为 None,则返回 None
fold=t.fold       

print(str(t))
#等价于--->
t1=t.isoformat('auto')
#返回表示为下列 ISO 8601 格式之一的时间字符串:
'''
 参数
'auto': 如果 microsecond 为 0 则与 'seconds' 相同,否则与 'microseconds' 相同
'hours': 以两个数码的 HH 格式 包含 hour
'minutes': 以 HH:MM 格式包含 hour 和 minute
'seconds': 以 HH:MM:SS 格式包含 hour, minute 和 second
'milliseconds': 包含完整时间,但将秒值的小数部分截断至微秒。 格式为 HH:MM:SS.sss
'microseconds': 以 HH:MM:SS.ffffff 格式包含完整时间。
'''
t2=time.fromisoformat(t1)#返回对应于 time.isoformat() 所提供的某种 time_string 格式的 time
t3=t.strftime('%H:%M:%S')#返回一个由显式格式字符串所指明的代表时间的字符串

utf=t.utcoffset()#如果 tzinfo 为 None,则返回 None,否则返回timedelta
tzname=t.tzname()
#若timezone给定了tzname则返回给定值,否则为字符串 UTC±HH:MM(创建timezone时的时差)

datetime对象

datetime 对象是包含来自 date 对象和 time 对象的所有信息的单一对象
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
year, month 和 day 参数是必须的,其余参数是可选的

  • 当 datetime1 的时间在 datetime2 之前则认为 datetime1 小于 datetime2。
  • 如果比较的一方是简单型而另一方是感知型,则如果尝试进行顺序比较将引发 TypeError。
  • 如果两个比较方都是感知型,且具有相同的 tzinfo 属性,则相同的 tzinfo 属性会被忽略并对基本日期时间值进行比较。
  • 如果两个比较方都是感知型且具有不同的 tzinfo 属性,则两个比较方将首先通过减去它们的 UTC 差值(使用 self.utcoffset() 获取)来进行调整
from datetime import datetime,timezone,timedelta
import time

date1=datetime.utcnow()#返回当前 UTC 日期和时间
date2=datetime.today()
#返回表示当前地方时的 datetime 对象
tz=timezone(timedelta(hours=9))
date3=datetime.now(tz)
#返回特定时区的datetime对象,若参数不提供,那么返回当地时间与today()相同

date4=datetime.fromtimestamp(time.time(),tz=tz)
#将Unix纪元秒数转换为指定时区时间的datetime对象,若tz为None则返回本地时间,否则返回tz参数指定的时区的时间
f=date4.timestamp()
#返回datetime对象距离epoch初始时间的秒数
date5=datetime.utcfromtimestamp(time.time())
#将Unix纪元秒数转换为UTC时间的datetime对象
#datetime.fromtimestamp(timestamp, tz=timezone.utc)#创建感知型UTC datetime对象

date6=datetime.fromordinal(1000)
#返回给定序号的ISO历法的日期,公元1 年1 月1 日的序号为1,结果的hour,minute,second均为0
ordinal=date6.toordinal()
#返回ISO历法日期对应的序号

str0=str(date2)
str1=date2.isoformat()#等价于str(datetime)
#返回一个以 ISO 8601 格式表示的日期和时间字符串
#可选参数sep,默认为T,即在日期和时间之间用T作为分隔符
#可选参数timespec与time对象的isoformat相同
date7=datetime.fromisoformat(str1)#str可以只包含year,month,day
#返回一个对应于 date.isoformat() 和 datetime.isoformat() 所提供的某一种 date_string 的 datetime 对象

str2=date2.strftime('%Y-%m-%d  %I(%p):%M:%S')
#将datetime对象转换成指定的format样式的字符串输出
date8=datetime.strptime(str2,'%Y-%m-%d  %I(%p):%M:%S')
#返回一个对应于 date_string,根据 format 进行解析得到的 datetime 对象

hour=date2.hour
day=date2.day
microsecond=date2.microsecond
tzinfo=date3.tzinfo  #返回timezone对象
#……访问dayetime对象的属性

tz1=date1.timetz()
#返回具有同样 hour, minute, second, microsecond, fold 和 tzinfo 属性性的 time 对象
utcoffset=date3.utcoffset()
#如果 tzinfo 为 None,则返回 None,否则返回定义timezone对象时使用的timedelta对象

d1=date1.date()#返回具有同样 year, month 和 day 值的 date 对象。
t1=date1.time()
#返回具有同样 hour, minute, second, microsecond 和 fold 值的 time 对象。 tzinfo 值为 None
st1=date1.timetuple()#返回struct_time
st2=date1.utctimetuple()#返回datetime的UTC时间的struct_time

date9=date3.astimezone(tz=timezone(timedelta(hours=10)))
#返回一个具有新的 tzinfo 属性 tz 的 datetime 对象
#并会调整日期和时间数据使得结果对应的 UTC 时间与原datetime对象对应的UTC时间相同
#如果 原datetime对象 为简单型,它会被假定为基于系统时区表示的时间
#如果调用时不传入参数 (或传入 tz=None) 则将假定目标时区为系统的本地时区
date10=date2.replace(minute=10,tzinfo=timezone(timedelta(hours=9)))
#返回一个具有同样属性值的 datetime,除非通过任何关键字参数为某些属性指定了新值
#可以通过指定 tzinfo=None 来从一个感知型 datetime 创建一个简单型 datetime 而不必调整日期和时间数据
#也可以附加一个时区对象 tz 到一个 datetime 对象 , 而不调整日期和时间数据

i1=date2.weekday()
#返回一个整数代表星期几,星期一为 0,星期天为 6。 相当于 self.date().weekday()。
i2=date2.isoweekday()
#返回一个整数代表星期几,星期一为 1,星期天为 7。 相当于 self.date().isoweekday()
truple1=date2.isocalendar()
#返回一个 3 元组 (ISO 年份, ISO 周序号, ISO 周日期)。 等同于 self.date().isocalendar()

str3=date2.ctime()
#返回'Wed Aug 19 16:24:37 2020'格式的字符串

最后

以上就是紧张流沙为你收集整理的datetime --- 基本的日期和时间类型的全部内容,希望文章能够帮你解决datetime --- 基本的日期和时间类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部