python加时间,python安装库

  python加时间,python安装库

  本文主要介绍Python中内置的时间包:datetime包和time包。通过学习时间包,我们可以轻松地处理开发过程中的时间。来和边肖一起学习吧。

  

目录
日期时间时间包日期时间时间包常用函数时间对象到字符串时间字符串到时间类型时间格式化程序时间模块了解时间戳的常用方法时间模块日期时间时间戳生成函数日期时间时间戳到时间对象

  

datetime 时间包

  知道日期时间时间包:

  日期:日期;时间:时间;所以datetime是日期和时间的组合。使用datetime,我们可以获得当前时间和时间间隔。我们可以把时间对象转换成时间字符串或者字符串转换成时间类型(字符串转换成时间对象有格式要求)。

  

datetime 时间包的常用功能

  获取当前的时间

  #导入包和模块

  #第一种导入方法:

  从日期时间导入日期时间#第一个日期时间是一个包;第二个日期时间是一个模块。

  #第二种导入方法:

  导入日期时间#直接导入日期时间包

  # *************************************************************************

  #如何使用:

  #如果我们使用第一个导入方法,那么我们可以通过datetime模块直接调用now()函数:

  print(datetime.now())

  #执行结果如下:

  # 2020-01-16 14:20:19.534920

  #返回当前年、月、日、小时、分钟、秒和毫秒的datetime对象。

  #如果我们使用第二种导入方法,那么我们需要用datetime.datetime.now()的方式来调用now()函数:

  打印(datetime.datetime.now())

  #执行结果如下:

  # 2020-01-16 14:22:11.534920

  #返回当前年、月、日、小时、分钟、秒和毫秒的datetime对象。

  获取时间间隔

  其实获取时间间隔本身是没用的。它需要和我们刚刚提到的datetime模块的now()函数结合使用。

  #导入包

  从日期时间导入日期时间

  从日期时间导入时间增量

  #这里注意:timedelta不是模块,是函数;

  #至于为什么不是模块,我们就不深究了;你可以猜测timedelta可能是__init__里面写的一个函数。datetime包下的py文件,提前导入。

  #如何使用:

  timeobj=timedelta(天=0,秒=0,微秒=0,毫秒=0,分钟=0,小时=0,周=0)

  # days:两者之间的天数。

  # seconds:间隔的秒数

  #微秒:之间的毫秒数

  #毫秒:之间的微秒数。

  # minutes:间隔的分钟数。

  # hours:之间的小时数

  # weeks:两者之间的周数。

  #我们可以传递所有这些参数,或者只传递一个;在相隔一两天的情况下,我们可以用几个小时或几天。

  #传入类型为整数,支持整数和负数。通常,我们建议使用正数。

  datetime 时间包的小案例

  结合现在的时间和区间,我们来看看下面这个小案例:

  从日期时间

   import datetime

  from datetime import timedelta

  now = datetime.now()

  print(now, type(now))

  # >>> 执行结果如下:

  # >>> 2020-01-16 15:04:00.492240 <class datetime.datetime>

  three_days = timedelta(days=3)

  after_three_days = now + three_days

  print(三天之后的时间是:, after_three_days)

  # >>> 执行结果如下:

  # >>> 三天之后的时间是: 2020-01-16 15:04:00.492240

  before_three_days = now - three_days

  print(三天之前的时间是:, after_three_days)

  # >>> 执行结果如下:

  # >>> 三天之前的时间是: 2020-01-16 15:04:00.492240

  one_hour = timedelta(hours=1)

  before_one_hour = now - one_hour

  print(一小时之前的时间是:, before_one_hour)

  # >>> 执行结果如下:

  # >>> 一小时之前的时间是: 2020-01-16 14:04:00.492240

  

  通过上面的小案例我们知道,时间对象之间我们可以做 加法与减法 的操作,但是时间对象有个问题。

  它无法进行时间对象之间的传输,比如A服务想要给B服务传输一个时间对象,但是时间对象是无法传输的,必须先要转成字符串,然后才可以进行传输,接下来我们就学习一下如何将时间对象转成字符串。

  

  

时间对象转字符串

  上文我们知道,想要获取时间对象就要调用 datetime 模块的 now() 函数,并且执行获取一个时间对象。

  然后赋值给一个 now 变量,now 变量的值作为一个时间对象也会有自己的内置函数。

  通过调用内置函数 strftime() 【strftime 是一个格式化字符串的标准】,通过这个字符化的标准就可以通过 format 将当前的日期时间对象按照 format 的标准转为时间字符串。

  用法如下:

  

# 获取时间对象

  from datetime import datetime

  now = datetime.datetime.now()

  # 时间对象转为字符串

  date_str = now.strftime(format)

  

  示例如下:

  

from datetime import datetime

  date = datetime.now()

  str_date = date.strftime(%Y-%m-%d %H:%M:%S) # 括号内为时间类型的格式化标准的字符集合

  print(str_date)

  # >>> 执行结果如下:

  # >>> 2020-01-16 15:44:26 # 符合时间格式的字符串

  # >>> 其实还有更多的时间格式符,在下面会有详细介绍

  

  接下来,我们用上面的 datetime 时间包的小案例 来实现我们的 时间对象转字符串 场景

  

from datetime import datetime

  from datetime import timedelta

  now = datetime.now()

  # print(now, type(now))

  now_str = now.strftime(%Y-%m-%d %H:%M:%S)

  print(now_str, type(now_str))

  # >>> 执行结果如下:

  # >>> 2020-01-16 16:14:15 <class str> 时间对象已经按照strftime标准格式化成了字符串类型

  three_days = timedelta(days=3)

  after_three_days = now + three_days

  # print(三天之后的时间是:, after_three_days)

  after_three_days_str = after_three_days.strftime(%Y/%m/%d %H:%M:%S)

  print(after_three_days_str, type(after_three_days_str))

  # >>> 执行结果如下:

  # >>> 2020/01/16 16:19:35 <class str>

  # >>> 通过这里我们发现,只要我们只要保证格式符是我们想要的属性,格式的状态我们可以自己去定义

  # >>> 甚至这些 / 都可以不需要,看下面的运行结果

  after_three_days_str = after_three_days.strftime(%Y%m%d)

  print(after_three_days_str, type(after_three_days_str))

  # >>> 执行结果如下:

  # >>> 20220313 <class str>

  # >>> 验证了格式的状态我们可以自己去定义的想法,甚至我们都没有输出 时、分、秒

  

  

  

时间字符串转时间类型

  时间字符串转时间类型方法如下:

  

# 获取时间模块

  from datetime import datetime

  # 时间字符串转时间类型

  datetime.strptime(tt,format)

  # 参数介绍:

  # tt:符合时间格式的字符串

  # format:tt时间字符串匹配规则

  

  示例如下:

  

from datetime import datetime

  str_date = 2020-01-01 08:08:08

  date_obj = datetime.strptime(str_date, %Y-%m-%d %H:%M:%S) # 格式化标准要与时间字符串匹配

  print(date_obj, type(date_obj))

  # >>> 执行结果如下:

  # >>> 2020-01-01 08:08:08 <class datetime.datetime>

  

  同样的使用 datetime 时间包的小案例 来实现我们的 时间字符串转时间类型 场景

  

from datetime import datetime

  from datetime import timedelta

  now = datetime.now()

  # print(now, type(now))

  now_str = now.strftime(%Y-%m-%d %H:%M:%S)

  # print(now_str, type(now_str))

  now_obj = datetime.strptime(now_str, %Y-%m-%d %H:%M:%S)

  print(now_obj, type(now_obj))

  # >>> 执行结果如下:

  # >>> 2020-01-10 18:00:54 <class datetime.datetime>

  

  上面我们进行 时间对象转字符串的时候,将时间对象的 '%Y-%m-%d %H:%M:%S' 格式进行了取舍,只输出了 '%Y-%m-%d' ; 这我们尝试 时间字符串转为时间类型 同样做一个取舍试一下,也只保留 '%Y-%m-%d

  

from datetime import datetime

  from datetime import timedelta

  now = datetime.now()

  three_days = timedelta(days=3)

  after_three_days = now + three_days

  # print(三天之后的时间是:, after_three_days)

  after_three_days_str = after_three_days.strftime(%Y/%m/%d %H:%M:%S)

  # print(after_three_days_str, type(after_three_days_str))

  after_three_days_obj = datetime.strptime(after_three_days_str, %Y/%m/%d)

  print(after_three_days_obj, type(after_three_days_obj))

  # >>> 执行结果如下:

  # >>> ValueError: time data 2020/01/13 18:22:19 does not match format %Y%m%d

  # >>> 这里提示我们 格式符 与 字符串 不匹配,所以当时间字符串转为时间类型时,格式状态要保持一致

  # 补上 时、分、秒 看看运行结果

  after_three_days_obj = datetime.strptime(after_three_days_str, %Y/%m/%d %H:%M:%S)

  print(after_three_days_obj, type(after_three_days_obj))

  # >>> 执行结果如下:

  # >>> 2020-01-13 18:26:58 <class datetime.datetime>

  

  接下来我们再看看被我们 使用 '%Y/%m/%d' 截断的 时间类型转为字符串,再转为时间类型会是怎样的输出结果。

  

from datetime import datetime

  from datetime import timedelta

  now = datetime.now()

  three_days = timedelta(days=3)

  before_three_days = now - three_days

  # print(三天之前的时间是:, after_three_days)

  before_three_days_str = before_three_days.strftime(%Y%m%d)

  # print(before_three_days_str, type(before_three_days_str))

  before_three_days_obj = datetime.strptime(before_three_days_str, %Y%m%d)

  print(before_three_days_obj, type(before_three_days_obj))

  # >>> 执行结果如下:

  # >>> 2020-01-13 00:00:00 <class datetime.datetime>

  # >>> 这里我们发现,时间类型转为字符串,再转为时间类型,由于使用 %Y/%m/%d 截断转为字符串的原因

  # >>> 在再次转为 时间类型 后,它的输出结果的 时、分、秒 部分变成了 00:00:00

  

  非时间格式字符串转时间类型

  我们直接定义一个 非时间格式的字符串,尝试转为 时间类型 看看会有怎样的结果

  

from datetime import datetime

  from datetime import timedelta

  date_time = 2020 01 A

  print(datetime.strptime(date_time, %Y %m))

  # >>> 执行结果如下:

  # >>> ValueError: unconverted data remains: A

  # >>> 这里报错信息为:不知道 A 对应的格式是什么,字符串格式中,我们也没有对 A 使用格式化方法;

  # >>> 同时,date_time 也是一个非标准的时间格式字符串,我们没有办法对其进行时间格式的转换

  

  

  

时间格式符

  字符介绍%Y完成的年份 如2020%m月份, 1-12%d月的某一天,1-31%H一天中的第几个小时,24小时(00-23)%I一天中的第几个小时,12小时(01-12)%M当前的第几分钟(00-59)%S当前分的第几秒(00-61) 多出来的两秒是闰年的%f当前秒的第几毫秒%a简化的星期,如Wed%A完整的星期,如Wednesday%b简化的月份,如二月 Feb%B完整的月份,如二月 February%c本地的日期和时间,如 Wed Feb 5 10:14:30 2020%p上午或下午;AM 为上午 ,PM为下午%j一年中的第几天%U一年中的星期数

  

  

time模块

  在上文我们学习 python 中第一个内置包 datetime (日期时间包),学习了如何使用 datetime 如何获取当前的日期对象以及日期对象与日期字符串之间的互相转换。

  接下来我们学习一下 python 中的 第一个内置模块,它也是用来处理时间的,那就是 time 模块。学会使用 time 模块,可以丰满我们对时间的处理。

  

  

认识时间戳

  什么是时间戳?其实时间戳就是时间,只不过他的起始时间有所不同。

  

  • 时间戳是从 1970年1月1日00时00分00秒至今的总毫秒(秒)数 ;Python 默认是按秒来计算时间戳的。
  • 在 python 中,用 timestamp 来表示时间戳
  • 在 python 中,时间戳 是一个 float 类型。我们使用 datetime 获取时间对象是可以看到 年月日、时分秒的;而时间戳展示给我们是从 1970年1月1日00时00分00秒至今的秒数(时间戳可以转成我们可读的 年月日、时分秒格式,我们稍后就会学习如何使用)。
  • time 模块的总体功能就是为了处理时间与转换格式

  time 模块与它的函数们:

  1.时间处理,转换成时间格式

  2.time 函数 ,生成时间戳数

  3.localtime 函数,获取本地时间函数

  localtime 函数 需要了解对应的字段介绍

  4.sleep 函数 ,暂停/休眠/等待

  5.strftime 函数,将时间对象转为字符串

  6.strptime 函数,将时间字符串转为时间对象

  

  

time 模块的常用方法

  

# 导入包;

  import time

  # 使用方法:

  time.time()

  # 返回值:

  # 秒级别的浮点类型

  # 示例:

  # 1580878485.4009378

  

  注意:每个语言返回的时间戳格式都不太一样,有的是返回秒级别,有的是返回毫秒级别。无论哪一种,时间都是一样的,只是 秒 与 毫秒 之间的转换而已。

  获取本地时间函数 - localtime

  

# 导入包;

  import time

  # 使用方法:

  time.localtime(timestamp)

  # 参数介绍:

  # timestamp:可以传入一个时间戳,传入后 localtime() 函数会将传入的时间戳转为 时间对象。

  # 可以不传入,如果不传入时间戳;会默认返回当前最新的时间对象。

  

  示例如下:

  

import time

  test_time = time.localtime()

  print(test_time)

  # >>> 执行结果如下:

  # >>> time.struct_time(tm_year=2022, tm_mon=3, tm_mday=11, tm_hour=13, tm_min=33, tm_sec=52, tm_wday=4, tm_yday=70, tm_isdst=0)

  # >>> 输出的是 localtime 字段信息

  

  localtime 对应字段信息介绍

  属性名介绍取值范围tm_year四位数的年单位1970~∞tm_mon月1~12tm_mday日1~31tm_hour小时0~23tm_min分钟0~59tm_sec秒0~61(闰年会多两秒)tm_wday一周的第几天0~6(0是周一)tm_yday一年的第几日1~366(支持儒略历,现用的是格里历即公历)tm_isdst夏令时-1 或 0 ;1 代表是否是夏时令

  来看一下 localtime 函数 的小案例

  

import time

  test_time = time.time()

  test_time_obj = time.localtime(test_time)

  print(test_time_obj, type(test_time_obj))

  # >>> 执行结果如下:

  # >>> 1578898063.2553177

  # >>> time.struct_time(tm_year=2020, tm_mon=1, tm_mday=13, tm_hour=14, tm_min=46, tm_sec=44, tm_wday=4, tm_yday=70, tm_isdst=0) <class time.struct_time>

  # >>> 通过这样的方式,就可以将我们的时间戳转为 time.struct_time 的时间对象,可读性会变得很好

  

  上文我们提到过,localtime() 函数内可以不传入参数,获取的是当前最新的时间对象。我们也来看一下:

  

import time

  current_time = time.localtime()

  print(current_time)

  # >>> 执行结果如下:

  # >>> time.struct_time(tm_year=2022, tm_mon=1, tm_mday=13, tm_hour=14, tm_min=57, tm_sec=47, tm_wday=4, tm_yday=70, tm_isdst=0)

  

  刚刚提到过,我们的 python 获取的是秒级别的时间戳,如果我们想要获取 毫秒 级别的时间戳要怎么办?其实很签单,我们只需要需要将获取的时间戳 *1000(乘以1000就可以了)就可以获取 毫秒级 的时间戳了。

  

import time

  print(time.time())

  print(time.time() * 1000)

  # >>> 执行结果如下:

  # >>> 1646982476.7887278

  # >>> 1646982476788.7278

  # >>> 上下比对一下,发现我们的 秒级别 时间戳已经变为了 毫秒级 的时间戳了

  

  暂停函数 - sleep

  sleep():名如其实,该函数会将我们的程序暂停执行一段时间。

  

# 导入包;

  import time

  # 使用方法:

  time.sleep(second)

  # 参数介绍:

  # second:希望程序被暂停执行的秒数

  

  示例如下:

  

import time

  for i in range(5):

   print(i)

   time.sleep(1)

  # >>> 大家可以在自己电脑上试试运行效果

  

  time 中的 strftime

  

# 导入包;

  import time

  # 使用方法:

  time.strftime(format, t)

  # 参数介绍:

  # format:时间的格式化规范

  # t:time.localtime 对应的时间类型

  # >>> 其实用法与前文介绍的 datetime 的 strftime 完全一致,只不过对应的对象是 time 的时间对象

  

  示例如下:

  

import time

  str_time = time.strftime(%Y-%m-%d %H:%M:%S, time.localtime())

  print(str_time)

  # >>> 执行结果如下:

  # >>> 2020-01-13 16:22:21

  

  time 中的 strptime

  

# 导入包;

  import time

  # 使用方法:

  time.strptime(time_str, format)

  # 参数介绍:

  # time_str:符合时间格式的字符串

  # format:确保与 time_str 一致的格式化标准(字符串的内容都都可以通过 时间格式符 匹配上)

  

  示例如下:

  

import time

  obj_time = time.strptime(2020-01-13, %Y-%m-%d)

  print(obj_time)

  # >>> 执行结果如下:

  # >>> time.struct_time(tm_year=2020, tm_mon=1, tm_mday=13, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=13, tm_isdst=-1)

  

  

  

datetime 中生成时间戳的函数

  前文我们在讲解 datetime 包的时候,并没有讲解如何使用 datetime 中生成时间戳,现在顺着 时间戳部分一起带出来。

  

# 导入包;

  import datetime

  # 使用方法:

  now = datetime.datetime.now()

  datetime.datetime.timestamp(now)

  # 不同于 time 模块的 time 函数 的生成 时间戳

  # 而是将一个 datetime 对象 转为时间戳,所以括弧中不传入参数是会报错的。

  # 参数介绍:

  # now:datetime 的时间对象

  

  示例如下:

  

import datetime

  now = datetime.datetime.now()

  now_timestamp = datetime.datetime.timestamp(now)

  print(now_timestamp, type(now_timestamp))

  # >>> 执行结果如下:

  # >>> 1642067213.882046 <class float> 秒级别的时间戳,浮点类型

  

  

  

datetime 时间戳转时间对象

  

# 导入包;

  import datetime

  # 使用方法:

  datetime.datetime.fromtimestamp(timestamp)

  # 参数介绍:

  # timestamp:时间戳

  # 返回值:

  # 返回一个 datetimes 的日期对象

  

  示例如下:

  

import datetime

  now = datetime.datetime.now()

  now_timestamp = datetime.datetime.timestamp(now)

  datetime_obj = datetime.datetime.fromtimestamp(now_timestamp)

  print(datetime_obj, type(datetime_obj))

  # >>> 执行结果如下:

  # >>> 2020-01-13 17:43:08.795082 <class datetime.datetime>

  

  可能大家会有个疑问,既然 datetime 包 与 time 模块的功能很多都是一样的,那么为什么会有这两个包和模块的存在呢?

  其实,在实际工作中 datetime 包更多的是对于日期的处理;而 time 模块更多的则是对时间的处理,比如 时、分、秒 这样的格式,使用 time 模块来处理会更合适一些。

  到此这篇关于Python学习之时间包使用教程详解的文章就介绍到这了,更多相关Python时间包内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: