前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python时间模块那些事

Python时间模块那些事

作者头像
披头
发布2020-04-26 16:57:53
1.2K0
发布2020-04-26 16:57:53
举报
文章被收录于专栏:datartisan

python有三大时间模块,分别是time,datetime,calendar,今天来学习下

time模块

首先要导入time模块

代码语言:javascript
复制
import time

time模块常用函数:

获取struct_time的时间字符串

time.asctime([t])t为可选参数,可以是gmtime() or localtime()返回的元组或struct_time,当参数t为空时,使用localtime()返回的当前时间

代码语言:javascript
复制
time.asctime( )
代码语言:javascript
复制
'Sat Apr 11 20:08:57 2020'
代码语言:javascript
复制
time.asctime( time.gmtime(3600) )
代码语言:javascript
复制
'Thu Jan  1 01:00:00 1970'
代码语言:javascript
复制
time.asctime( time.localtime() )
代码语言:javascript
复制
'Sat Apr 11 20:49:56 2020'

获取UTC格式的struct_time

time.gmtime([secs])将自计算机元年1970-01-01 00:00:00以来以秒为单位的时间转换为 UTC 格式的struct_time,其中 dst 标志始终为零。如果未提供secs或为None,则使用按time()返回的当前时间(不考虑时区)

代码语言:javascript
复制
time.gmtime( )
代码语言:javascript
复制
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=11, tm_hour=13, tm_min=5, tm_sec=21, tm_wday=5, tm_yday=102, tm_isdst=0)
代码语言:javascript
复制
time.gmtime(3600)
代码语言:javascript
复制
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

获取时间戳的时间字符串

time.ctime([secs])将自计算机元年1970-01-01 00:00:00以来以秒为单位的时间转换为时间字符串,如果未提供secs或为None,则使用按time()返回的当前时间(不考虑时区),ctime(secs) 等价于 asctime(localtime(secs))

代码语言:javascript
复制
time.ctime( )
代码语言:javascript
复制
'Sat Apr 11 21:05:22 2020'
代码语言:javascript
复制
time.ctime( 3600 )
代码语言:javascript
复制
'Thu Jan  1 09:00:00 1970'
代码语言:javascript
复制
time.asctime( time.localtime(3600))
代码语言:javascript
复制
'Thu Jan  1 09:00:00 1970'

获取本地时间的struct_time

time.localtime([secs])类似于gmtime(),但转换为本地时间的struct_time。如果未提供secs或为None,则使用按time()返回的当前时间(考虑时区)

代码语言:javascript
复制
time.localtime( )
代码语言:javascript
复制
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=11, tm_hour=21, tm_min=9, tm_sec=44, tm_wday=5, tm_yday=102, tm_isdst=0)
代码语言:javascript
复制
time.localtime( 0 )# 考虑时区
代码语言:javascript
复制
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

程序休眠

time.sleep(secs)暂停对给定秒数的调用线程的执行。参数可以是浮点数,以指示更精确的睡眠时间。常用于程序的休眠设置。

代码语言:javascript
复制
time.sleep(5)

格式化时间字符串

time.strftime(format[, t])将表示gmtime() or localtime()返回的时间的元组或struct_time转换为格式参数指定的字符串。如果未提供t,则使用本地时间返回的当前时间。格式必须是字符串。如果t中的任何字段超出允许的范围,则引发值错误。

0在时间元组的任意位置都是合法的。

代码语言:javascript
复制
from time import gmtime, strftime
strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
代码语言:javascript
复制
'Sat, 11 Apr 2020 13:28:27 +0000'
代码语言:javascript
复制
from time import localtime, strftime
strftime("%a, %d %b %Y %H:%M:%S +0800", localtime())
代码语言:javascript
复制
'Sat, 11 Apr 2020 21:29:42 +0800'
代码语言:javascript
复制
strftime("%p ", localtime())
代码语言:javascript
复制
'PM '

指令

意义

%a

缩写工作日名称。

%A

完整工作日名称。

%b

缩写月份名称。

%B

完整月份名称。

%c

适当的日期和时间表示形式。

%d

当月中的某一天用十进制数字表示 [01,31]。

%H

小时(24小时时钟)用十进制数字表示 [00,23]。

%I

小时(12 小时时钟)用十进制数字表示 [01,12]。

%j

一年中的某一天用十进制数字表示 [001,366]。

%m

月份用十进制数字表示 [01,12]。

%M

分钟用十进制数字表示 [00,59]。

%p

根据输入的时间返回AM 或 PM。

%S

秒用十进制数字表示 [00,61]。

%U

一年的周数(星期日作为星期的第一天)用十进制数字表示 [00,53]。新一年中第一个星期日之前的所有日子都被视为在第 0 周。

%w

工作日用十进制数字表示 [0(星期日),6])。

%W

一年的周数(星期一作为星期的第一天)用十进制数字表示 [00,53]。新一年中第一个星期一之前的所有日子都被视为在第 0 周。

%x

适当的日期表示。

%X

适当的时间表示。

%y

无世纪年份用十进制数字表示[00,99]。

%Y

有世纪年份用十进制数字表示。

%z

时区偏移量表示与窗体 [HHMM 或 -HHMM 的 UTC/GMT 的正或负时差,其中 H 表示十进制小时数字,M 表示十进制分钟数字 [-23:59, [23:59]。

%Z

时区名称(如果没有时区,则无字符)。

%%

文本字符。'%'

解析时间字符串

根据格式分析表示时间的字符串。返回值是gmtime() or localtime()返回的struct_time

格式参数使用与strftime()使用指令相同的指令。它默认使用"%a %b %d %H:%M:%S %Y"格式,与ctime()返回的格式匹配的格式。如果无法根据格式分析字符串,或者分析后具有多余的数据,则引发ValueError。当无法推断更准确的值时,用于填充任何缺失数据的默认值为(1900, 1, 1, 0, 0, 0, 0, 1, -1) 。字符串和格式都必须是字符串

代码语言:javascript
复制
import time
time.strptime("30 Nov 68", "%d %b %y")
代码语言:javascript
复制
import time
time.strptime("30 Nov 69", "%d %b %y"
代码语言:javascript
复制
import timetime.strptime("30 Nov 69", "%d %b %y")
代码语言:javascript
复制
time.struct_time(tm_year=1969, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=334, tm_isdst=-1)

时间元组

time.struct_timegmtime(), localtime(), and strptime()返回的时间值序列的类型。它是具有命名元组接口的对象:可以通过索引和属性名称访问值。存在以下值:

代码语言:javascript
复制
import time
print(time.strptime(ctime()))
print(time.strptime(ctime())[0])
print(time.strptime(ctime())[1])
print(time.strptime(ctime())[2])
print(time.strptime(ctime())[3])
print(time.strptime(ctime()).tm_min)
print(time.strptime(ctime()).tm_sec)
print(time.strptime(ctime()).tm_wday)# 0..6
print(time.strptime(ctime()).tm_yday)
代码语言:javascript
复制
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=11, tm_hour=22, tm_min=43, tm_sec=6, tm_wday=5, tm_yday=102, tm_isdst=-1)
2020
4
11
22
43
6
5
102

Index

Attribute

Values

0

tm_year

(for example, 1993)

1

tm_mon

range [1, 12]

2

tm_mday

range [1, 31]

3

tm_hour

range [0, 23]

4

tm_min

range [0, 59]

5

tm_sec

range [0, 61]

6

tm_wday

range [0, 6], Monday is 0

7

tm_yday

range [1, 366]

8

tm_isdst

0, 1 or -1

N/A

tm_zone

abbreviation of timezone name

N/A

tm_gmtoff

offset east of UTC in seconds

获取时间戳UTC秒

time.time()计算机元年1970-01-01 00:00:00以来的时间以秒为单位作为浮点数返回.

代码语言:javascript
复制
time.time()
代码语言:javascript
复制
1586615526.449903
代码语言:javascript
复制
time.gmtime(0)
代码语言:javascript
复制
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

datetime

常用的四个类:date, time, datetime, timedelta

date

date表示日历中的日期。date的常用方法如下

代码语言:javascript
复制
from datetime import date
date.today() # 返回当前日期
代码语言:javascript
复制
datetime.date(2020, 4, 12)
代码语言:javascript
复制
date.fromtimestamp(1588291200) # 返回UTC的日期
代码语言:javascript
复制
datetime.date(2020, 5, 1)
代码语言:javascript
复制
date.fromisoformat('2020-04-12') # 返回ISO时间字符串的日期
代码语言:javascript
复制
datetime.date(2020, 4, 12)

date类的属性

代码语言:javascript
复制
date.today().year

2020

代码语言:javascript
复制
date.today().month

4

代码语言:javascript
复制
date.today().day

12

date类的实例方法

代码语言:javascript
复制
d = date(2002, 12, 31)
d.replace(day=26) # 年月日替换
代码语言:javascript
复制
datetime.date(2002, 12, 26)
代码语言:javascript
复制
date.timetuple(date(2020,12,31)) # 返回日期的元组
代码语言:javascript
复制
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=366, tm_isdst=-1)
代码语言:javascript
复制
date.weekday(date(2020,4,12)) # 返回星期几,0..6

6

代码语言:javascript
复制
date.isoweekday(date(2020,4,12)) # 返回星期几,1..7

7

代码语言:javascript
复制
date.isocalendar(date(2020,1,1)) # 返回三元组 (ISO年份,ISO周号,ISO工作日)

(2020, 1, 3)

代码语言:javascript
复制
date.isoformat(date(2020,4,12)) # 返回ISO标准日期字符串

'2020-04-12'

代码语言:javascript
复制
date.__str__(date(2020,4,12)) # 等效于date.isoformat(date(2020,4,12))

'2020-04-12'

代码语言:javascript
复制
date(2020,4,12).ctime() # 返回时间字符串

'Sun Apr 12 00:00:00 2020'

代码语言:javascript
复制
date(2020,4,12).strftime("%d/%m/%Y") # 格式化日期
代码语言:javascript
复制
'12/04/2020'
代码语言:javascript
复制
# date.__format__(format)
date(2020,4,12).__format__("%d/%m/%Y") # 等效于date.strftime("format"),使得可以在格式化的字符串文本中使用

'12/04/2020'

代码语言:javascript
复制
'The {1} is {0:%d}, the {2} is {0:%B}.'.format(date(2020,4,12), "day", "month")
代码语言:javascript
复制
'The day is 12, the month is April.'

datetime

常用函数方法

代码语言:javascript
复制
from datetime import datetime
datetime.today()
代码语言:javascript
复制
datetime.datetime(2020, 4, 12, 8, 10, 1, 750533)
代码语言:javascript
复制
datetime.now()# 本地时间,有时区
代码语言:javascript
复制
datetime.datetime(2020, 4, 12, 8, 12, 22, 442582)
代码语言:javascript
复制
datetime.utcnow() #UTC时间,无时区
代码语言:javascript
复制
datetime.datetime(2020, 4, 12, 0, 43, 50, 822484)
代码语言:javascript
复制
#datetime.fromtimestamp(timestamp, tz=None)
datetime.fromtimestamp(1588291200, tz=None)# 本地时间
代码语言:javascript
复制
datetime.datetime(2020, 5, 1, 8, 0)
代码语言:javascript
复制
#datetime.utcfromtimestamp(timestamp)
datetime.utcfromtimestamp(1588291200)# UTC时间
代码语言:javascript
复制
datetime.datetime(2020, 5, 1, 0, 0)
代码语言:javascript
复制
#datetime.combine(date, time, tzinfo=self.tzinfo)
from datetime import date,time
d = date(2020, 4, 12)
t = time(12,30)
z = None
datetime.combine(d, t, tzinfo=z)
代码语言:javascript
复制
datetime.datetime(2020, 4, 12, 12, 30)
代码语言:javascript
复制
#datetime.fromisoformat(date_string), YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
datetime.fromisoformat('2020-04-12 11:11:11')
代码语言:javascript
复制
datetime.datetime(2020, 4, 12, 11, 11, 11)
代码语言:javascript
复制
#datetime.strptime(date_string, format)
datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
代码语言:javascript
复制
datetime.datetime(2006, 11, 21, 16, 30)

datetime属性

代码语言:javascript
复制
print(datetime.now())
print(datetime.now().year)
print(datetime.now().month)
print(datetime.now().day)
print(datetime.now().hour)
print(datetime.now().minute)
print(datetime.now().second)
print(datetime.now().microsecond)
print(datetime.now().tzinfo)
代码语言:javascript
复制
2020-04-12 09:14:03.809207
2020
4
12
9
14
3
810208
None

datetime实例方法

代码语言:javascript
复制
from datetime import date
datetime(2020,4,12).date()
代码语言:javascript
复制
datetime.date(2020, 4, 12)
代码语言:javascript
复制
datetime(2020,4,12).time()
代码语言:javascript
复制
datetime.time(0, 0)
代码语言:javascript
复制
datetime(2020,4,12).weekday()

6

代码语言:javascript
复制
datetime(2020,4,12).isoweekday()

7

代码语言:javascript
复制
datetime(2020,4,12).timetuple()
代码语言:javascript
复制
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=103, tm_isdst=-1)

代码语言:javascript
复制
datetime(2020,4,12).timestamp()

1586620800.0

代码语言:javascript
复制
datetime(2020,4,12).isocalendar()

(2020, 15, 7)

time

time属性

代码语言:javascript
复制
from datetime import time
print(time(12,1,1).hour)
print(time(12,1,1).minute)
print(time(12,1,1).second)
print(time(12,1,1).microsecond)
代码语言:javascript
复制
12
1
1
0
代码语言:javascript
复制
from datetime import time
time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')

'12:34'

代码语言:javascript
复制
dt = time(hour=12, minute=34, second=56, microsecond=0)
代码语言:javascript
复制
dt.isoformat()

'12:34:56'

代码语言:javascript
复制
dt.isoformat(timespec='auto')

'12:34:56'

代码语言:javascript
复制
dt.isoformat(timespec='hours')

'12'

代码语言:javascript
复制
dt.isoformat(timespec='minutes')

'12:34'

代码语言:javascript
复制
dt.isoformat(timespec='seconds')

'12:34:56'

代码语言:javascript
复制
dt.isoformat(timespec='milliseconds')

'12:34:56.000'

代码语言:javascript
复制
dt.isoformat(timespec='microseconds')

'12:34:56.000000'

代码语言:javascript
复制
dt.__str__()# 等效于t.isoformat()

'12:34:56'

代码语言:javascript
复制
#time.strftime(format)
dt.strftime("%H:%M:%S")

'12:34:56'

timedelta

datetime返回两个日期或时间的时间间隔。内部仅使用days, seconds and microseconds

days:[-999999999..999999999]

seconds:[0..86399]

microseconds:[0..999999]

代码语言:javascript
复制
from datetime import timedelta
year = timedelta(days=365)
another_year = timedelta(weeks=40, days=84, hours=23,
                         minutes=50, seconds=600)  # adds up to 365 days
year.total_seconds()

31536000.0

代码语言:javascript
复制
year == another_year
代码语言:javascript
复制
True
代码语言:javascript
复制
ten_years = 10 * year
代码语言:javascript
复制
ten_years, ten_years.days // 365
代码语言:javascript
复制
(datetime.timedelta(days=3650), 10)
代码语言:javascript
复制
nine_years = ten_years - year
nine_years, nine_years.days // 365
代码语言:javascript
复制
(datetime.timedelta(days=3285), 9)
代码语言:javascript
复制
three_years = nine_years // 3
three_years, three_years.days // 365
代码语言:javascript
复制
(datetime.timedelta(days=1095), 3)
代码语言:javascript
复制
abs(three_years - ten_years) == 2 * three_years + year
代码语言:javascript
复制
True
代码语言:javascript
复制
def month_day():
    import

calendar

代码语言:javascript
复制
import calendar
from datetime import date
代码语言:javascript
复制
mydate=date.today()
month_calendar_str = calendar.month(mydate.year, mydate.month)
print(f"{month_calendar_str}\n")# 当月的日历图
代码语言:javascript
复制
     April 2020
Mo Tu We Th Fr Sa Su
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

扩展案例

获取某年某月的所有日期

代码语言:javascript
复制
def month_days(year,month):
    from datetime import date,timedelta
    begin_date=date(year,month,1)
    end_date=date(year,month+1,1)
    days = (end_date-begin_date).days
    month_days=[]
    for i in range(1,days+1):
        month_days.append(date(year,month,i))
    for str in month_days:
        print(str)
代码语言:javascript
复制
month_days(2020,4)
代码语言:javascript
复制
2020-04-01
2020-04-02
2020-04-03
2020-04-04
2020-04-05
2020-04-06
2020-04-07
2020-04-08
2020-04-09
2020-04-10
2020-04-11
2020-04-12
2020-04-13
2020-04-14
2020-04-15
2020-04-16
2020-04-17
2020-04-18
2020-04-19
2020-04-20
2020-04-21
2020-04-22
2020-04-23
2020-04-24
2020-04-25
2020-04-26
2020-04-27
2020-04-28
2020-04-29
2020-04-30

获取某年某周的所有日期

代码语言:javascript
复制
def week_days(year,week):
    from datetime import date,datetime,timedelta
    diff_weekday = 8-datetime(year,1,1).isocalendar()[2]
    diff_week = week-datetime(year,1,1).isocalendar()[1]
    first_day = date(year,1,1)+timedelta(diff_weekday+7*diff_week-7)
    week_days=[]
    for i in range(7):
        week_days.append(first_day+timedelta(i))
    for str in week_days:
        print(str)
代码语言:javascript
复制
week_days(2020,16)
代码语言:javascript
复制
2020-04-13
2020-04-14
2020-04-15
2020-04-16
2020-04-17
2020-04-18
2020-04-19
代码语言:javascript
复制
datetime(2020,4,13).isocalendar()

(2020, 16, 1)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐享数据8090 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • time模块
    • time模块常用函数:
    • datetime
    • calendar
    • 扩展案例
      • 获取某年某月的所有日期
        • 获取某年某周的所有日期
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档