返回顶部
首页 > 资讯 > 后端开发 > Python >python日期和时间
  • 237
分享到

python日期和时间

日期时间python 2023-01-31 07:01:21 237人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

python中常用的处理时间的模块有两个:time 模块、datetime 模块,time模块是比较基础的一个模块,可满足对时间类型数据的基本处理;而 datetime模块可以看做是 对time模块的一个高级封装,功能更加强大,例如在时间

python中常用的处理时间的模块有两个:time 模块、datetime 模块,time模块是比较基础的一个模块,可满足对时间类型数据的基本处理;而 datetime模块可以看做是 对time模块的一个高级封装,功能更加强大,例如在时间的加减上(获取指定时间的前(后)一天的时间,获取指定时间的前(后)一小时的时间),使用datetime模块,实现起来更为方便~

时间也是一个数据类型,这个类型中的数据一般可分为 3类 时间形式:时间戳(timestamp),结构化时间(struct_time),格式化的时间字符串(fORMat string)~

时间戳(timestamp)

在计算机中,时间是用数字来表示的。1970年1月1日 00:00:00 UTC+00:00时区的时刻称为 epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数(浮点型),即 timestamp。
 
获取当前时间的时间戳:

>>> import time
>>> time.time()
1539009280.9001613        # float 类型

结构化时间

结构化时间是一个 struct_time元组,其中有9个字段,具体说明如下:

字段 说明
tm_year 年,例如:2018
tm_mon 月,取值:1-12
tm_mday 日,取值:1-31
tm_hour 小时,取值:0-23
tm_min 分钟,取值:0-59
tm_sec 秒,取值:0-60
tm_wday 星期几,取值:0到6 (0是周一)
tm_yday 一年中的第几天,取值:1 到 366
tm_isdst 标志位,决定是否为夏令时,取值:-1, 0, 1

获取当前时间的结构化时间:

>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=8, tm_hour=22, tm_min=59, tm_sec=12, tm_wday=0, tm_yday=281, tm_isdst=0)

# time.localtime() 还可以接收一个时间戳参数,获取指定的时间:
>>> time.localtime(10)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=10, tm_wday=3, tm_yday=1, tm_isdst=0)

# Tip:由于是东8时区所以 tm_hour 是8,而不是0~

# time.gmtime() 与 time.localtime() 作用类似,区别在于 localtime() 返回的是当前时区的时间,gmtime()返回的是格林威治时间,即 UTC 时间~
>>> time.gmtime()
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=8, tm_hour=15, tm_min=5, tm_sec=25, tm_wday=0, tm_yday=281, tm_isdst=0)
>>> time.gmtime(10)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=10, tm_wday=3, tm_yday=1, tm_isdst=0)

也可以手动创建结构化时间(9个参数依次传入,注意是以元组的方式传入),这种方式并不常用:

>>> time.struct_time((2018,10,8,23,0,9,3,335,-1))
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=8, tm_hour=23, tm_min=0, tm_sec=9, tm_wday=3, tm_yday=335, tm_isdst=-1)

格式化的时间字符串

格式化的时间字符串 就是使用字符串表示时间,例如:'2018-10-08 23:13:23'。

字符串时间的获取:

>>> time.ctime()
'Sun Oct 14 08:32:04 2018'
>>> time.asctime()
'Sun Oct 14 08:32:10 2018'

3种时间形式之间的转换关系

python日期和时间

结构化时间和时间字符串之间的相互转换

结构化时间转为字符串时间

>>> time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
'2018-10-14 08:42:58'

# strftime函数的第一个参数指定时间的格式,可以根据需求而定,例如仅获取时间年月日
>>> time.strftime('%Y%m%d', time.localtime())
'20181014'

时间的format格式如下:

    %a      本地(local)简化星期名称
    %A      本地完整星期名称
    %b      本地简化月份名称
    %B      本地完整月份名称
    %c      本地相应的日期和时间表示
    %d      一个月中的第几天(01-31)
    %H      一天中的第几个小时(24小时制,00-23)
    %l      一天中的第几个小时(12小时制,01-12)
    %j      一年中的第几天(01-366)
    %m      月份(01-12)
    %M      分钟数(00-59)
    %p      本地am或者pm的相应符
    %S      秒(01-61)
    %U      一年中的星期数(00-53,星期天是一个星期的开始,第一个星期天之前的所有天数都放在第0周)
    %w      一个星期中的第几天(0-6,0是星期天)
    %W      和%U基本相同,不同的是%W以星期一为一个星期的开始
    %x      本地相应日期
    %X      本地相应时间
    %y      去掉世纪的年份(00-99)
    %Y      完整的年份       
    %z      用+HHMM或者-HHMM表示距离格林威治的时区偏移(H代表十进制的小时数,M代表十进制的分钟数)
    %Z      时区的名字(如果不存在为空字符)
    %%      %号本身
            %p只有与%I配合使用才有效果
            当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U和%W才会被计算

除了strftime函数,还有asctime函数可以将结构化时间转为时间字符串,只是这个函数最多仅接受一个参数,无法实现对字符串进行定制~

>>> time.asctime(time.localtime())
'Sun Oct 14 09:16:57 2018'

# 不传参的情况,默认传入的就是time.localtime()
>>> time.asctime()
'Sun Oct 14 09:19:09 2018'

# 定制结构化时间
>>> time.asctime(time.struct_time((2000,11,30,0,0,0,3,335,-1)))
'Thu Nov 30 00:00:00 2000'

字符串时间转为结构化时间

# 第一个参数为时间字符串,第二个参数指定之间格式
>>> time.strptime('2018-10-14 08:42:58', '%Y-%m-%d %H:%M:%S')
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=14, tm_hour=8, tm_min=42, tm_sec=58, tm_wday=6, tm_yday=287, tm_isdst=-1)

>>> time.strptime('2018-10-14', '%Y-%m-%d')
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=287, tm_isdst=-1)

# 第二个参数也可以不指定,只是这个时候字符串的格式必须是 '%a %b %d %H:%M:%S %Y'
>>> time.strptime('Sun Oct 14 09:03:46 2018')
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=14, tm_hour=9, tm_min=3, tm_sec=46, tm_wday=6, tm_yday=287, tm_isdst=-1)

>>> time.strptime('Sun Oct 14 09:03:46 2018', '%a %b %d %H:%M:%S %Y')
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=14, tm_hour=9, tm_min=3, tm_sec=46, tm_wday=6, tm_yday=287, tm_isdst=-1)

结构化时间和时间戳之间的相互转换

时间戳转为结构化时间
上面提到的time.localtime(),time.gmtime()其实就是将时间戳转为格式化时间

# time.localtime() 可以接受一个 int 类型 的参数,即表示时间戳
>>> time.localtime(10)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=10, tm_wday=3, tm_yday=1, tm_isdst=0)

# 不传入参数时,默认传入的就是当前时间戳,即time.time()
print(time.localtime())
print(time.localtime(time.time()))

输出结果:
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=14, tm_hour=9, tm_min=34, tm_sec=13, tm_wday=6, tm_yday=287, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=14, tm_hour=9, tm_min=34, tm_sec=13, tm_wday=6, tm_yday=287, tm_isdst=0)

结构化时间转为时间戳

>>> >>> time.mktime(time.localtime())
1539481022.0

注:字符串时间 和 时间戳 之间,无法实现 直接转换

datetime是Python处理时间和日期的标准库,功能要比 time模块 强大,且使用起来更为方便~
 
datetime模块中定义的类

说明
datetime.date 表示日期,常用的属性有:year, month和day
datetime.time 表示时间,常用属性有:hour, minute, second, microsecond
datetime.datetime 表示日期时间
datetime.timedelta 表示两个date、time、datetime实例之间的时间间隔,分辨率(最小单位)可达到微秒
datetime.tzinfo 时区相关信息对象的抽象基类。它们由datetime和time类使用,以提供自定义时间的而调整。
datetime.timezone Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量

 
datetime模块中定义的常量

常量名称 说明
datetime.MINYEAR datetime.date或datetime.datetime对象所允许的年份的最小值,值为1
datetime.MAXYEAR datetime.date或datetime.datetime对象所允许的年份的最大值,只为9999

这里主要说明的是datetime模块中datetime类~

获取当前时间

使用datetime.datetime类获取当前时间

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 10, 14, 10, 29, 55, 175498)

# 指定标准时区
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2018, 10, 14, 2, 30, 1, 831932, tzinfo=datetime.timezone.utc)

这里返回的时间类型就是 datetime.datetime。datetime.datetime类 里面封装的方法可实现 datetime.datetime类型的时间和 上述所说的3种时间类型 之间的相互转换~

获取指定时间

在实例化 datetime.datetime类 过程中,传递参数,来获取指定的时间。

# 其中 year,month,day为必须传递的参数
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

# 示例
>>> datetime.datetime(year=2018, month=10, day=14)
datetime.datetime(2018, 10, 14, 0, 0)

参数说明如下:

参数 取值范围
year [MINYEAR, MAXYEAR]
month [1, 12]
day [1, 指定年份的月份中的天数]
hour [0, 23]
minute [0, 59]
second [0, 59]
microsecond 微妙,[0, 1000000]
tzinfo 时区,tzinfo的子类对象

datetime 和 3种时间类型 之间的相互转换

datetime 和结构化时间 之间的相互转换

# 从结构化时间到 datetime,即是在实例化datetime类时,指定各个参数;无法实现从 time.struct_time 到 datetime的直接转换~
>>> datetime.datetime(year=2018, month=10, day=14, hour=10, minute=49, second=50)
datetime.datetime(2018, 10, 14, 10, 49, 50)

# 从datetime到结构化时间
>>> datetime.datetime.now().timetuple()
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=14, tm_hour=10, tm_min=52, tm_sec=23, tm_wday=6, tm_yday=287, tm_isdst=-1)

datetime 和时间戳 之间的相互转换

# 从时间戳到 datetime
>>> datetime.datetime.fromtimestamp(10)           # 当前时区
datetime.datetime(1970, 1, 1, 8, 0, 10)
>>> datetime.datetime.utcfromtimestamp(10)     # 标准时区
datetime.datetime(1970, 1, 1, 0, 0, 10)

# 根据当前时间戳获取 datetime
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2018, 10, 14, 10, 56, 46, 302245)

# 从datetime 到时间戳
>>> datetime.datetime.timestamp(datetime.datetime.now())
1539486116.698343
>>> datetime.datetime.timestamp(datetime.datetime.now(datetime.timezone.utc))
1539486173.079687

datetime 和时间字符串 之间的相互转换

datetime 和时间字符串之间的转换 与 time.strftime、time.strptime类似~

# 从 datetime 到 时间字符串
>>> dt = datetime.datetime.now()
>>> dt.strftime('%Y-%m-%d %H:%M:%S')
'2018-10-14 11:32:49'

# 从 时间字符串 到datetime
>>> datetime.datetime.strptime('2018-10-14 11:32:49', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2018, 10, 14, 11, 32, 49)

datetime 的加减(dtetime.timedalta)

timedelta 类用于表示两个时间之间的差值,可以直接对datetime.datetime对象进行加减操作~,若使用time模块,需要先将 字符串时间 或者 结构化时间(struct_time)转换为时间戳个格式,然后对该时间戳加上或者减去 n 秒,最后再将时间戳格式转换回 字符串时间 或者 结构化时间,这样非常的麻烦。利用 datetime 模块提供的 timedelta 类 可以直接对 datetime.date,datetime.time,datetime.datetime对象进行 以 天,秒、微秒、毫秒、分钟、小时、周 为单位的加减运算~

如下是timedelta类的inti方法:

def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,
                         milliseconds: float = ..., minutes: float = ..., hours: float = ...,
                         weeks: float = ...) -> None: ...

示例:

>>> dt = datetime.datetime.now()

# 2天后的时间
>>> dt + datetime.timedelta(2)
datetime.datetime(2018, 10, 16, 11, 49, 0, 699630)

# 2天前的时间
>>> dt + datetime.timedelta(-2)
datetime.datetime(2018, 10, 12, 11, 49, 0, 699630)

# 1小时之后
>>> dt + datetime.timedelta(hours=1)
datetime.datetime(2018, 10, 14, 12, 49, 0, 699630)

# 一小时前
>>> dt + datetime.timedelta(hours=-1)
datetime.datetime(2018, 10, 14, 10, 49, 0, 699630)

# 一天一小时之后
>>> dt + datetime.timedelta(days=1, hours=1)
datetime.datetime(2018, 10, 15, 12, 49, 0, 699630)

# 一个半小时之后
>>> dt + datetime.timedelta(hours=1, minutes=30)
datetime.datetime(2018, 10, 14, 13, 19, 0, 699630)

datetime.time和datetime.date

datetime模块中除了datetime类,还有date,time。date和time类并不常用~

date

date 的 init 方法,其中year,month,day都是必须参数:

def __init__(self, year: int, month: int, day: int) -> None: ...

获取 date 对象:

>>> datetime.date(year=2018, month=10, day=14)
datetime.date(2018, 10, 14)

使用示例:

>>> today = datetime.date.today()
>>> today
datetime.date(2018, 10, 14)
>>> today.year
2018
>>> today.month
10
>>> today.day
14

# 时间戳转为date
>>> datetime.date.fromtimestamp(time.time())
datetime.date(2018, 10, 14)

# date转为结构化时间
>>> today.timetuple()
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=14, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=287, tm_isdst=-1)

time

time 的 init 方法,其中 hour 为必须参数:

def __init__(self, hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ...,
                 tzinfo: Optional[tzinfo] = ...) -> None: ...

参数说明:
hour # 小时,取值范围:[0, 23]
minute # 分钟,取值范围:[0, 59]
second # 秒,取值范围:[0, 59]
microsecond # 微秒,取值范围:[0, 1000000]
tzinfo # tzinfo的子类对象,如timezone类的实例

获取 time 对象:

>>> datetime.time(hour=23, minute=2, second=16)
datetime.time(23, 2, 16)

简单示例:

>>> dt = datetime.time(hour=23, minute=2, second=16)
>>> dt
datetime.time(23, 2, 16)
>>> dt.hour
23
>>> dt.minute
2
>>> dt.second
16
>>> dt.microsecond
0
>>> dt.tzinfo

# 按照指定的格式转为字符串
>>> dt.strftime('%H%M%S')
'230216'

.................^_^

--结束END--

本文标题: python日期和时间

本文链接: https://lsjlt.com/news/191933.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python日期和时间
    python中常用的处理时间的模块有两个:time 模块、datetime 模块,time模块是比较基础的一个模块,可满足对时间类型数据的基本处理;而 datetime模块可以看做是 对time模块的一个高级封装,功能更加强大,例如在时间...
    99+
    2023-01-31
    日期 时间 python
  • python time时间,日期,时间
    1.将字符串的时间转换为时间戳    方法:        a = "2013-10-10 23:40:00"        将其转换为时间数组        import time        timeArray = time.strp...
    99+
    2023-01-31
    时间 日期 python
  • Python时间和日期库的实现
    在 Python 中是没有原生数据类型支持时间的,日期与时间的操作需要借助三个模块,分别是 time、datetime、calendar。 time 模块可以操作 C 语言库中...
    99+
    2024-04-02
  • Python怎么输出日期和时间
    这篇文章主要介绍“Python怎么输出日期和时间”,在日常操作中,相信很多人在Python怎么输出日期和时间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么输出日期和时间”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • Python 日期时间处理
    开发过程中最常用的时间处理就是获取时间戳,获取当前日期,或者时间戳,日期互转,做个总结,免得总找不着。1、获取当前timestamp>>> from time import time >>> time()...
    99+
    2023-01-31
    日期 时间 Python
  • Python时间,日期,时间戳之间转换
    1.将字符串的时间转换为时间戳    方法:        a = "2013-10-10 23:40:00"        将其转换为时间数组        import time        timeArray = time.strp...
    99+
    2023-01-31
    时间 日期 Python
  • python 时间、日期、时间戳的转换
    在实际开发中经常遇到时间格式的转换,例如: 前端传递的时间格式是字符串格式,我们需要将其转换为时间戳,或者前台传递的时间格式和我们数据库中的格式不对应,我们需要对其进行转换才能与数据库的时间进行匹配等。 1、将字符串时间转换成时间戳 i...
    99+
    2023-01-31
    时间 日期 python
  • Python如何实现时间和日期库
    本篇内容主要讲解“Python如何实现时间和日期库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现时间和日期库”吧!在 Python 中是没有原生数据类型支持时间的,日期与时间...
    99+
    2023-06-13
  • Python标准库之日期、时间和日历模块
    一、time时间模块 import time 1 、时间戳:time.time() 时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移...
    99+
    2024-04-02
  • Python 日期和时间用法超强总结
    时间无疑是生活各个方面中最关键的因素之一,因此,记录和跟踪时间变得非常重要。在 Python 中,可以通过其内置库跟踪日期和时间。今天我们来介绍关于 Python 中的日期和时间,一起来了解如何使用time和datetime模块查找和修改日...
    99+
    2023-05-14
    Python 日期 用法
  • Python获取当前时间日期
    Python获取当前时间日期 Python获取当前时间日期一、时间日期基本介绍二、时间日期类型–time模块2.1 获取当前时间戳2.2 将时间戳转化为标准时间日期格式2.3 格式化时间 ...
    99+
    2023-09-02
    python
  • Python MySQL 日期时间格式化
    1.我的MySQL中的start_time存储的是2018-03-21 10:55:32格式的时间,我需要按照YYYY-MM-DD格式来查询,我的MySQL中的sql是这样写的:SELECT * from mytable WHER...
    99+
    2023-01-31
    日期 时间 Python
  • 详解python日期时间处理
    目录开发中常用的日期操作有哪些?我们看看这两个模块。time 内置模块calender 内置模块日期格式化处理总结讲了很多数据容器操作,这篇我们看看时间的处理。 开发中常用的日期操作...
    99+
    2024-04-02
  • Python处理日期和时间的方法总结
    目录1 简单入门1.1 获取当前时间1.2 获取当前日期1.3 datetime中的类2 datetime中的常用的类2.1  date类2.2 time类 2....
    99+
    2024-04-02
  • 在 Python 中对日期和时间进行排序
    文章目录 在 Python 中对日期和时间进行排序Python 中的日期时间模块sorted() 方法 使用 sorted() 方法对日期进行排序使用 sorted() 方法对时间进行排...
    99+
    2023-09-22
    python 开发语言
  • 如何弄清Python的时间和日期问题
    如何弄清Python的时间和日期问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python 程序中有很多内置模块可以处理日期和时间的方式,比如如calend...
    99+
    2023-06-02
  • Ubuntu系统日期和时间怎么设置?Ubuntu修改时间和日期的技巧
    Ubuntu系统的时间是可以自己设置的,该怎么手动设置日期和时间呢?下面我们就来看看详细的教程。 首先选择电脑桌面左下角的应用软件图标,如下图,点击打开 打开如下图界面,选择界面中的设置图标,点击打开 打开如下图界面,滑动...
    99+
    2022-05-28
    Ubuntu 日期 时间
  • golang日期转时间
    随着时代的发展,计算机语言也不断地更新和发展,其中golang作为一种新兴的编程语言,它的快速开发和高效性能备受开发者们的喜爱。在golang中,日期转时间是常见的一个需求,同时也是开发中较为复杂的一个问题。那么,在golang中如何实现日...
    99+
    2023-05-15
  • golang 日期转时间
    在Go语言里,日期和时间的处理可以使用time库。time库提供了一些函数用于日期和时间的操作,可以非常方便地对日期和时间进行转换和计算。首先,我们需要定义一个time.Time类型的变量来表示某个日期和时间。这个类型包括日期和时间信息,其...
    99+
    2023-05-15
  • Python时间与日期库有哪些
    本篇内容主要讲解“Python时间与日期库有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python时间与日期库有哪些”吧!1、ArrowArrow 是一个专门处理时间和日期的轻量级 Py...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作