python时间模块
时间模块
常见时间名词
GMT
格林威治标准时间,指的是太阳经过格林威治处的本初子午线时的时间,是最早的时间时标准
时区
1884年制定了时区,以本初子午线为起点,经度每隔15度,划分一个时区,相邻时区相差一个小时。
UTC
协调世界时,目前的世界时标准
它由全球很多个国家的绝原子钟时间协调得来,与所处地点无关,为了适应地球自转误差,UTC会做人为调整,比如润秒。
可以简单的认为,GMC就是UTC+0。
CST
中国标准时间,UTC+8:00,也称为北京时间,
时间模块
datetime模块
datetime类是时间高级类
- 类方法,即使用类调用的方法,由类方法获得一个时间对象
- now(tz=None)返回当前时间的datetime对象,时间到微秒,如果tz为None,返回当前时区的不带时区信息的时间
- utcnow() 不带时区的0时区时间
- fromtimestamp(timestamp,tz=None)从一个时间戳返回一个datetime对象
tz=datetime.timezone.utc
即0时区timezone对象
- 时间对象方法
- timestamp() 返回一个到微秒的时间戳
- Unix时间戳:格林威治时间1970年1月1日0点到现在的秒数
- 构造方法datetime.datetime(2016,1,1,12,32,42)
- year、month、day、hour、minute、second、microsecond,取datetime对象的年月日时分秒及微秒
- weekday()返回星期的天,周一0,周日6
- isoweekday()返回星期的天,周一1,周日7
- date()返回日期的date对象
- time()返回时间的time对象
- timestamp() 返回一个到微秒的时间戳
#打印当前北京时间(CST)
date1 = datetime.datetime.now()
print(date1)
#输出
2023-02-06 10:39:42.185071
#打印UTC时间(和北京时间相差8小时)
date1 = datetime.datetime.utcnow()
print(date1)
#输出
2023-02-06 02:40:42.567236
#将时间对象转换成时间戳
date1.timestamp()
#输出
1675622508.499005
#时间戳转化成对象
d7 = datetime.datetime.fromtimestamp(tz1)
d7
#输出
datetime.datetime(2023, 2, 6, 10, 45, 33, 806561)
# 构造器
print(datetime.datetime(2021, 6, 17, 18, 20, 5))
# 类方法获得时间对象
print(datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=8))))
# 时区时间
print(datetime.datetime.now()) # 无时区时间
print(datetime.datetime.utcnow()) # UTC时间,可以认为是GMT或0时区时间
# 时间戳操作
stamp = datetime.datetime.now().timestamp() # 获得时间戳
print(stamp)
dt = datetime.datetime.fromtimestamp(stamp) # 从时间戳获得时间对象
print(dt)
print(type(dt.date()), dt.date())
print(type(dt.time()), dt.time())
#年月日时分秒
date1.year,date1.month,date1.day,date1.hour,date1.minute,date1.second
(2023, 2, 6, 10, 45, 33)
Python 中时间分两种:
- naive,没有时区信息的时间,没法明确定位。这个时间表示那个地区的时间,全看程序理解
- aware,包含时区的时间
- 这两种时间不能混合计算
日期与格式化
- 类方法strptime(date_string,format),返回datetime对象(时间字符串+格式化字符串=>时间对象)
- 对象方法strftime(format),返回字符串(时间对象通过格式字符串=> 时间字符串)
- 字符串format函数格式化(时间对象通过格式字符串=>时间字符串)
import datetime
import datetime
datestr = '2018-01-10 17:16:08'
dt = datetime.datetime.strptime(datestr, '%Y-%m-%d %H:%M:%S') #由字符串到时间对象
print(type(dt), dt)
print(dt.strftime('%Y/%m/%d-%H:%M:%S')) # 输出为字符串
print("{:%Y/%m/%d %H:%M:%S}".format(dt)) # 输出为字符串
date2 = '2022-03-12 15:32:46'
dt = datetime.datetime.strptime(date2,'%Y-%m-%d %H:%M:%S')
print(dt,type(dt))
2022-03-12 15:32:46 <class 'datetime.datetime'>
time1 = dt.strftime('%Y/%m/%d %H:%M:%S')
print(time1,type(time1))
2022/03/12 15:32:46 <class 'str'>
time2 = "{:%Y/%m/%d %H:%M:%S}".format(dt)
print(time2,type(time2))
2022/03/12 15:32:46 <class 'str'>
timedelta 类
- datetime2 = datetime1 + timedelta
- datetime2 = datetime1 -timedelta
- timedelta = datetime1 - datetime2
- 构造方法
- datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)
- year = datetime.timedelta(days=365)
- timedelta对象有方法total_seconds()。返回时间差的总秒数
time1 = datetime.datetime.now()
print(time1)
#5天前
fivedaysago = time1 + datetime.timedelta(days=-5)
print(fivedaysago)
#返回时间差总秒数
(time1 - fivedaysago).total_seconds()
432000.0
time模块
- time.sleep(secs)将调用线程挂起指定的秒数
import time
time.sleep(5)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J.のblog!
评论