Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。时间间隔是以秒为单位的浮点小数。每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
datetime
| datetime模块定义了6个类 |
|
| datetime.date |
表示日期的类 |
| datetime.datetime |
表示日期时间的类 |
| datetime.time |
表示时间的类 |
| datetime.timedelta |
表示时间间隔 |
| datetime.tzinfo |
时区的相关信息 |
| datetime.timezone |
将tzinfo抽象基类实现为UTC固定偏移量的类 |
from datetime import date,datetime,time,timedelta
|
datetime.timedelta
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
|
| 属性 |
read-only |
| days |
Between -999999999 and 999999999 inclusive |
| seconds |
Between 0 and 86399 inclusive |
| microseconds |
Between 0 and 999999 inclusive |
| 方法 |
|
| total_seconds() |
返回持续时间中包含的总秒数 |
datetime.date
date(year,month,day)返回 ‘year-month-day’
date.today()返回today(datetime.date类)
date.fromtimestamp(timestamp)由时间戳转化
date.fromordinal(ordinal)
timestamp(时间戳)是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
| 属性 |
read-only |
| date.year |
Between MINYEAR and MAXYEAR inclusive. |
| date.month |
Between 1 and 12 inclusive. |
| date.day |
Between 1 and the number of days in the given month of the given year. |
运算
date2 = date1 + timedelta date2 = date1 - timedelta timedelta = date1 - date2 date1 < date2
|
| 方法 |
说明 |
| replace(year=self.year, month=self.month, day=self.day) |
替换给定日期,但不改变原日期 |
| timetuple() |
返回 time.struct_time对象(时间元祖) |
| toordinal() |
回归原始日期 |
| weekday() |
Return the day of the week as an integer, where Monday is 0 and Sunday is 6 |
| isoweekday() |
Return the day of the week as an integer, where Monday is 1 and Sunday is 7 |
| isocalendar() |
Return a 3-tuple, (ISO year, ISO week number, ISO weekday) |
| isoformat() |
Return a string ‘YYYY-MM-DD’ |
| ctime() |
return a string (date(2002, 12, 4).ctime() == 'Wed Dec 4 00:00:00 2002') |
| strftime(format) |
返回指定格式字符 |
datetime.datetime
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
|
| 创建 |
说明 |
datetime.today() |
返回当天date |
datetime.now() |
返回当前系统时间 |
datetime.fromtimestamp(timestamp, tz=None) |
根据时间戮返回datetime对象 |
datetime.fromordinal(ordinal) |
|
datetime.combine(date, time, tzinfo=self.tzinfo) |
date对象和time对象组合成新的datetime对象 |
datetime.strptime(date_string, format) |
字符串格式创建 |
datetime.strftime() |
转换为字符格式 |
| 属性 |
(read-only) |
| year |
Between MINYEAR and MAXYEAR inclusive. |
| month |
Between 1 and 12 inclusive. |
| day |
Between 1 and the number of days in the given month of the given year. |
| hour |
In range(24). |
| minute |
In range(60). |
| second |
In range(60). |
| microsecond |
In range(1000000).(微秒) |
| tzinfo |
时区 |
| fold |
|
运算
datetime2 = datetime1 + timedelta datetime2 = datetime1 - timedelta timedelta = datetime1 - datetime2 datetime1 < datetime2
|
| 方法 |
说明 |
| date() |
返回date对象 |
| time() |
返回time对象 |
| replace() |
替换 |
| ctime() |
返回格式如 Sun Apr 16 00:00:00 2017 |
| timetuple() |
返回time.struct_time对象 |
| utctimetuple() |
|
| toordinal() |
|
| timestamp() |
返回时间戳(float) |
| weekday() |
Monday is 0 and Sunday is 6 |
| isoweekday() |
Monday is 1 and Sunday is 7 |
| isocalendar() |
Return a 3-tuple, (ISO year, ISO week number, ISO weekday) |
| isoformat(sep=‘T’, timespec=‘auto’) |
Return a string ‘YYYY-MM-DDTHH:MM:SS.mm’ |
| ctime() |
return a string (‘Wed Dec 4 20:30:40 2002’) |
| strftime(format) |
由日期格式转化为字符串格式 |
关于时区的方法暂时不计入
datetime.time
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
|
| 属性 |
(read-only) |
| hour |
In range(24). |
| minute |
In range(60). |
| second |
In range(60). |
| microsecond |
In range(1000000). |
| tzinfo |
|
| fold |
|
| 方法 |
说明 |
| replace() |
|
| isoformat(timespec=‘auto’) |
|
| strftime(format) |
转字符格式 |
| tzname() |
返回时区名字 |
| utcoffset() |
返回时区的时间偏移量 |
| dst() |
|
时间日期格式化符号
| 格式 |
说明 |
Example |
| %a |
周日期缩写 |
Sun, Mon, …, Sat (en_US); |
| %A |
周日期全称 |
Sunday, Monday, …, Saturday (en_US); |
| %w |
周数字 |
0, 1, …, 6 |
| %d |
月中天数 |
01, 02, …, 31 |
| %b |
月份缩写 |
Jan, Feb, …, Dec (en_US); |
| %B |
月份全称 |
January, February, …, December (en_US); |
| %m |
月份数字 |
01, 02, …, 12 |
| %y |
年数字,两位 |
00, 01, …, 99 |
| %Y |
年数字,四位 |
0001, 0002, …, 2013, 2014, …, 9998, 9999 |
| %H |
24小时制 |
00, 01, …, 23 |
| %I |
12小时制 |
01, 02, …, 12 |
| %p |
AM or PM |
AM, PM (en_US); |
| %M |
分钟 |
00, 01, …, 59 |
| %S |
秒 |
00, 01, …, 59 |
| %f |
微秒 |
000000, 000001, …, 999999 |
| %z |
UTC offset in the form +HHMM or -HHMM |
(empty), +0000, -0400, +1030 |
| %Z |
时区名 |
(empty), UTC, EST, CST |
| %j |
年中的天数 |
001, 002, …, 366 |
| %U |
年中的周日期(周日为第一天) |
00, 01, …, 53 |
| %W |
年中的周日期(周一为第一天) |
00, 01, …, 53 |
| %c |
date and time |
Tue Aug 16 21:30:00 1988 (en_US); |
| %x |
date |
08/16/88 (None) 08/16/1988 (en_US) |
| %X |
time |
21:30:00 (en_US); |
| %% |
%'字符 |
% |
| %G |
ISO 8601 year |
0001, 0002, …, 2013, 2014, …, 9998, 9999 |
| %u |
ISO 8601 weekday |
1, 2, …, 7 |
| %V |
ISO 8601 week |
01, 02, …, 53 |
time
| 获取时间 |
说明 |
| time.time() |
返回时间戳(秒) |
| time.ctime([secs]) |
返回当前时间字符串 |
| time.gmtime([secs]) |
返回时间戳类 time.struct_time |
| time.localtime([secs]) |
返回时间戳类 time.struct_time |
| time.mktime(t) |
这是 localtime() 的反函数,它的参数是 struct_time |
>>> time.time() 1662128622.827007 >>> time.ctime() 'Fri Sep 2 22:23:17 2022' >>> time.localtime() time.struct_time(tm_year=2022, tm_mon=9, tm_mday=2, tm_hour=14, tm_min=25, tm_sec=26, tm_wday=4, tm_yday=245, tm_isdst=0)
|
| 字符转换 |
说明 |
| time.strftime(format[, t]) |
把一个元组或 struct_time 表示的时间转换成字符串 |
| time.strptime(string[, format]) |
解析表示时间的字符串,返回 struct_time |
>>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) 'Thu, 28 Jun 2001 14:17:15 +0000' >>> time.strptime("30 Nov 00", "%d %b %y") time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
|
| 计时器 |
说明 |
| time.perf_counter() |
返回一个性能计数器的值(秒) |
| time.process_time() |
返回当前进程的系统和用户 CPU 时间的总计值(秒) |
| time.sleep(secs) |
线程将被暂停执行 secs 秒 |
time_start = time.perf_counter() for i in range(10): time.sleep(1) time_end = time.perf_counter() t = time_end - time_start
|
calendar
星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数。
| calendar函数 |
|
| calendar.calendar(year,w=2,l=1,c=6) |
年日历 |
| calendar.firstweekday() |
返回当前每周起始日期的设置 |
| calendar.month(year,month) |
月日历 |
| calendar.isleap(year) |
是否闰年 |
| calendar.leapdays(y1,y2) |
返回在Y1,Y2两年之间的闰年总数 |
| calendar.monthrange(year, month) |
Returns weekday of first day of the month and number of days in month |
| calendar.weekday(year,month,day) |
Returns the day of the week (0 is Monday) |