发布于 2015-06-21 10:28:01 | 553 次阅读 | 评论: 0 | 来源: 网络整理
Python程序可以处理多种方式的日期和时间。日期格式之间的转换是一种常见计算机的杂活。 Python的时间和日历模块,能帮助处理日期和时间。
时间间隔为浮点数以秒为单位的数字。在特定的时间瞬间自上午12时00分,1970年1月1日(纪元)表示,单位为秒。
Python中可用的流行时间模块,它提供功能转换。该功能time.time()返回当前系统时间,因为上午12点,1970年1月1日(时代)。
#!/usr/bin/python
import time; # This is required to include time module.
ticks = time.time()
print "Number of ticks since 12:00am, January 1, 1970:", ticks
这将产生一个结果如下:
Number of ticks since 12:00am, January 1, 1970: 7186862.73399
日期计算是很容易。不过当日的时代之前,不能以这种形式来表示。在遥远的将来的日期也不能代表这种方式- 分界点是一段2038年在UNIX和Windows。
Python的时间函数处理时间为9个数字的元组,如下图所示:
索引 | 字段 | 值 |
---|---|---|
0 | 年(四位数字) | 2015 |
1 | 月份 | 1 - 12 |
2 | 日期 | 1 - 31 |
3 | 小时 | 0 - 23 |
4 | 分钟 | 0 - 59 |
5 | 秒 | 0 - 61 (60 或 61是闰秒) |
6 | 星期 | 0 - 6 (0 为星期一) |
7 | 一年中的第几天 | 1 - 366 (Julian日期) |
8 | 夏令时 | -1, 0, 1, -1 表示库决定DST |
上面的元组相当于struct_time结构。这种结构具有以下属性:
索引 | 属性 | 值 |
---|---|---|
0 | tm_year | 2018 |
1 | tm_mon | 1 - 12 |
2 | tm_mday | 1 - 31 |
3 | tm_hour | 0 - 23 |
4 | tm_min | 0 - 59 |
5 | tm_sec | 0 - 61 (60 或 61 是闰秒) |
6 | tm_wday | 0 to 6 (0 为星期一) |
7 | tm_yday | 1 to 366 (Julian日期) |
8 | tm_isdst | -1, 0, 1, -1 表示库决定DST |
转换一个时刻从秒epoch浮点值转换成时元组,浮点值传递给函数(例如,本地时间)返回时间元组的全部九项有效。
#!/usr/bin/python
import time;
localtime = time.localtime(time.time())
print "Local current time :", localtime
这将产生下面的结果,这可以在任何其他像样形式被格式化:
Local current time : time.struct_time(tm_year=2013, tm_mon=7,
tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)
可以随时根据要求格式化,但简单的方法来获取时间,可读的格式是asctime():
#!/usr/bin/python
import time;
localtime = time.asctime( time.localtime(time.time()) )
print "Local current time :", localtime
这将产生以下结果:
Local current time : Tue Jan 13 10:17:09 2009
日历模块提供了广泛的方法,如有年和月的日历。在这里,我们打印日历给定月份(2015年1月):
#!/usr/bin/python
import calendar
cal = calendar.month(2015, 1)
print "Here is the calendar:"
print cal;
这将产生以下结果:
Here is the calendar:
January 2008
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 31
Python中可用的流行时间模块,时间之间转换提供了以下一些函数。下面是所有可用方法的列表:
SN | 方法及描述 |
---|---|
1 | time.altzone 当地DST时区的偏移量,如果一个定义在UTC西部秒钟。这是负值,如果当地的DST时区为UTC东边(如西欧,包括英国)。如果白天不为零只用这个。 |
2 | time.asctime([tupletime]) 接受一个时间元组,并返回一个可读的24个字符的字符串,如“Tue Dec 11 18:07:14 2015'。 |
3 | time.clock( ) 返回当前CPU时间为几秒钟的浮点数。以测量不同方法的计算成本,time.clock的值比time.time()更有用 |
4 | time.ctime([secs]) 类似asctimeasctime(localtime(secs)),不带参数就像asctime() |
5 | time.gmtime([secs]) 接收表示从epoch秒钟的瞬间,并返回一个时间元组t及UTC时间。注意:t.tm_isdst始终为0 |
6 | time.localtime([secs]) 接收表示从epoch秒钟的瞬间,并返回一个时间元组t与被本地时间(t.tm_isdst是0或1,这取决于是否DST的适用于即时秒通过本地规则) |
7 | time.mktime(tupletime) 接受表示为一个时间的元组中的本地时间瞬间,并返回浮点值从epoch以秒表示的时刻 |
8 | time.sleep(secs) 暂停secs秒钟调用线程 |
9 | time.strftime(fmt[,tupletime]) 接收表示为一个时间的元组中的本地时间瞬间并返回表示所指定的字符串fmt瞬间的字符串 |
10 | time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') 根据格式字符串格式化解析str并返回时间元组格式 |
11 | time.time( ) 返回当前时刻,自时代浮点秒数 |
12 | time.tzset() 重置所使用的库例程的时间转换规则。环境变量TZ指定如何完成此操作。 |
下列是时间time模块提供两个重要的属性:
SN | 属性及描述 |
---|---|
1 | time.timezone 属性time.timezone是从UTC(>0,在美洲;<=0,在大多数欧洲,亚洲,非洲),抵销了本地时区的秒钟(不含DST)。 |
2 | time.tzname 属性time.tzname是一对语言环境相关的字符串,这是本地时区的名称。 |
日历calendar模块提供与日历相关的功能,包括功能来打印一个文本日历对于给定的月份或年份。
默认情况下,日历把星期一作为一周的第一天,周日为最后一天。要改变这种情况,调用calendar.setfirstweekday()函数。
下面是日历calendar模块可用的功能列表:
SN | 方法及描述 |
---|---|
1 | calendar.calendar(year,w=2,l=1,c=6) 返回为多行字符串的逐年日历格式化成用c空格分隔的三列。 w是中的每一个日期字符的宽度;每行的长度为21* w +18+2* c。 l为每个星期的行数。 |
2 | calendar.firstweekday( ) 返回当前设置为每个星期开始工作日。默认情况下,当先导入calendar,这是0,意思是星期一。 |
3 | calendar.isleap(year) 如果今年是闰年返回true,否则为false。 |
4 | calendar.leapdays(y1,y2) 返回范围内的总数在range(y1,y2)。 |
5 | calendar.month(year,month,w=2,l=1) 返回为多行字符串与日历月month年year,每周一条线加上两个标题行。 w是中的每一个日期字符的宽度;每行的长度为7* W +6。 l为每个星期的行数。 |
6 | calendar.monthcalendar(year,month) 返回整数的列表。每个子列表表示一个星期。月month年year都设置为0;在一个月内,day都被设置为一天,月份,1及以上的数字。 |
7 | calendar.monthrange(year,month) 返回两个整数。第一个是星期几月month年year的第一天的代码;第二个是在所述月份的天数。星期代码是0(星期一)至6日(星期日);月数是1〜12。 |
8 | calendar.prcal(year,w=2,l=1,c=6) 打印类似calendar.calendar(year,w,l,c). |
9 | calendar.prmonth(year,month,w=2,l=1) 打印类似calendar.month(year,month,w,l). |
10 | calendar.setfirstweekday(weekday) 将每个星期的第一天工作日代码设置。星期代码是0(星期一)至6日(星期日)。 |
11 | calendar.timegm(tupletime) time.gmtime的反向:接受一个时刻在时间元组的形式,并返回同一时刻为从epoch浮点秒数。 |
12 | calendar.weekday(year,month,day) 返回给定日期的星期代码。星期代码0(星期一)至6日(星期日);月份数字代码为1(一月)到12(12月)。 |
如果有兴趣,那么在这里也要找到其他重要的模块和功能,如:日期和时间在Python使用: