1. Python 中的时间
Python
中,关于时间、日期处理的库有三个:time
、datetime
、Calendar
。其中:datetime
又有datetime.date/datetime.time/datetime.datetime
三个类
1.1 时区
- 所有的时间都有一个时区。同样一个时间戳,根据不同的时区,它可以转换成不同的时间。
pytz
模块的common_timezones
可以获取常用的表示时区的字符串。你可以通过pytz.timezone('timezone_str')
来创建时区对象。
1.2 time 模块
time
模块中,时间有三种表现形式:Unix
时间戳。指的是从1970
年以来的秒数- 本地时间的
struct_time
形式:一个命名元组,第一位为年、第二位为月…. UTC
时间的struct_time
的形式:类似于上面的,只是为UTC
时间。区别在于:前者是本地时间local time
,后者是UTC
时间
查看当前时间的三种表现形式:
Unix
时间戳:time.time()
local struct_time
:time.localtime()
utc struct_time
:time.gmtime()
三种格式之间的转换:
timestamp--->local time
:time.localtime(time_stamp)
timestamp--->utc time
:time.gmtime(time_stamp)
local time--->timestamp
:time.mktime(local_time)
utc time---> timestamp
:calendar.timegm(utc_time)
三种格式的时间转换为字符串:
timestamp
:time.ctime(time_stamp)
local struct_time time/utc struct_time time
:time.asctime(struct_time)
对于
local struct_time time/utc struct_time time
:你也可以使用time.strftime(format_str,struct_time)
来自定义格式化串。其中format_str
为格式化串。
字符串转换为
struct_time
:time.strptime(time_str,format_str)
。其中format_str
为格式化串。查看当前时区:
time.timezone
。它返回的是距离UTC
时间的距离(单位为秒)(>0,在美洲;<=0,在大多数欧洲,亚洲,非洲)。你无法通过修改它的值来修改时区。time
模块使用的是系统的时区。
1.3 datetime 模块
datetime
模块中主要包含四个类:datetime.time
:时间类。只包含时、分、秒、微秒等时间信息datetime.date
:日期类。值包含年月日星期等日期信息datetime.datetime
:日期时间类。包含上述两者的全部信息datetime.timedelta
:日期时间间隔类,用来表示两个datetime
之间的差值。
datetime.time
的构造函数为:time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
其中
tzinfo
就是时区对象。0<=hour<24
,0<=minute<60
,0<=second<60
,0<=microsecond<1000000
,否则抛出异常。tzinfo
默认为None
属性有:
hour/minute/second/microsecond/tzinfo
方法有:
time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
:替换对应的值,返回一个新的对象time.isoformat()
:返回一个ISO 8601
格式的字符串。time.strftime(format)
:格式化datetime.time
对象time.tzname()
:如果时区为为None
,则返回None
。否则返回时区名称
datetime.date
的构造函数为:datetime.date(year, month, day)
month
取值为[1,12]
;day
取值为[1,num]
,num
取决于指定的年和月有多少天
类方法有:
date.today()/date.fromtimestamp(timestamp)
属性有:
year/month/day
方法有:
- 运算:
date1-date2
、date1+timedelta
、date1-timedelta
、date1<date2
date.replace(year,month,day)
:替换掉对应值,返回新对象date.timetuple()
:返回一个time.struct_time
类型的元组date.weekday()
:返回代表星期几的数字。0
为周日date.isoweekday()
:返回代表星期几的数字。7
为周日date.isocalendar()
:返回一个元组(ISO year,IOS week num,ISO weekday)
date.isoformat()
:返回一个ISO 8601
格式的字符串。date.ctime()
:等价于time.ctime(time.mktime(d.timetuple()))
date.strftime(format)
:格式化datetime.date
对象
datetime.datetime
的构造函数为:datetime.datetime(year, month, day, hour=0, minute=0,
second=0, microsecond=0, tzinfo=None)
类方法有:
datetime.today()
:返回当前的时间日期datetime.now(tz=None)
:返回指定时区当前的时间日期。如果tz=None
,则等价于datetime.today()
datetime.utcnow()
:返回当前的UTC
时间日期datetime.fromtimestamp(timestamp, tz=None)
:根据时间戳,创建指定时区下的时间日期。datetime.utcfromtimestamp(timestamp)
:根据时间戳,创建UTC
下的时间日期。datetime.combine(date, time)
:从date
和time
对象中创建datetime
datetime.strptime(date_string, format)
:从字符串中创建datetime
属性有:
year/month/day/hour/minute/second/microsecond/tzinfo
方法有:
- 运算:
datetime1-datetime2
、datetime1+timedelta
、datetime1-timedelta
、datetime1<datetime2
datetime.date()
:返回一个date
对象datetime.time()
:返回一个time
对象(该time
的tzinfo=None
)datetime.timetz()
:返回一个time
对象(该time
的tzinfo
为datetime
的tzinfo
)datetime.replace([year[, month[, day[, hour[, minute[, second
[, microsecond[, tzinfo]]]]]]]])
:替换掉指定值,返回新对象datetime.astimezone(tz=None)
:调整时区。如果tz=None
,则默认采用系统时区。注意,调整前后的UTC
时间是相同的。datetime.tzname()
:返回时区名字datetime.timetuple()
:返回一个time.struct_time
这样的命名元组datetime.utctimetuple()
:返回一个time.struct_time
这样的命名元组,注意它是在UTC
时间下的,而不是local time
下的datetime.timestamp()
:返回一个时间戳datetime.weekday()
:返回代表星期几的数字。0
为周日datetime.isoweekday()
:返回代表星期几的数字。7
为周日datetime.isocalendar()
:返回一个元组(ISO year,IOS week num,ISO weekday)
datetime.isoformat(sep='T')
:返回一个ISO 8601
格式的字符串。datetime.ctime()
:等价于time.ctime(time.mktime(d.timetuple()))
datetime.strftime(format)
:格式化datetime.datetime
对象。
注意:不能将
tzinfo=None
和tzinfo!=None
的两个datetime
进行运算。下面是常用的格式化字符串的定义:
'%Y'
:4位数的年'%y'
:2位数的年'%m'
:2位数的月[01,12]
'%d'
:2位数的日[01,31]
'%H'
:小时(24小时制)[00,23]
'%I'
:小时(12小时制)[01,12]
'%M'
:2位数的分[00,59]
'%S'
:秒[00,61]
,61
秒用于闰秒'%w'
:用整数表示的星期几[0,6]
,0 表示星期日'%U'
:每年的第几周[00,53]
。星期天表示每周的第一天。每年的第一个星期天之前的那几天被认为是第 0 周'%W'
:每年的第几周[00,53]
。星期一表示每周的第一天。每年的第一个星期一之前的那几天被认为是第 0 周'%z'
:以+HHMM
或者-HHMM
表示的UTC
时区偏移量。如果未指定时区,则返回空字符串。'%F'
:以%Y-%m-%d
简写的形式'%D'
:以%m/%d/%y
简写的形式'%a'
:星期几的简称'%A'
:星期几的全称'%b'
:月份的简称'%B'
:月份的全称'%c'
:完整的日期和时间'%q'
:季度[01,04]
timedelta
代表一段时间。其构造:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0,
minutes=0, hours=0, weeks=0)
在内部,只存储秒、微秒。其他时间单位都转换为秒和微秒。
实例属性(只读):
days/seconds/microseconds
实例方法:
timedelta.total_seconds()
:返回总秒数。