python中时间那些事儿

今天在弄个程序,从MSSQLServer读取部分数据,然后存储到sqlite,还有前一段时间转换数据库时都 遇到了时间的转换问题,这里就把常用的几个时间日期转换函数列出来,说一下用法,也算是复习用法

首先要知道,数据库中存储时间有多种形式,我用过的:

使用<b>datetime.datetime.now()</b>,如:2012-03-27 22:32:49.560165 优点: 直观易读 缺点: 存储占用空间大 比较大小、排序不便

使用<b>time.mktime(time.localtime())</b>,如1332859349.0,表示从0时区的1970年1月1日,0时整以来的秒数(epoch)。
因为那一刻是UNIX元年开始的时间。 优点: 存储占用空间小 排序方便 缺点 不直观,无法看一眼就理解

综合来看,我倾向于使用第二种方法,因为它的缺点可以避免,谁没事直接去数据库?会看数据库的人估计也会转换的。 得到时间和日期之后要说说怎么转换。

无论怎么转换,都需要现转换成9-item sequence,即一个九项的序列

从格式化时间转换成epoch

比如把2012-03-27 22:32:49.560165转换成秒数,使用 <b>time.mktime()</b>, 但是这个函数接受的参数为9-item sequenc。必须先进行转换,使用<b>time.strptime()</b>, 进行反格式化,
<b>time.strptime('2012-03-27 22:32:49.560165'[:19], '%Y-%m-%d %H:%M:%S')</b>
然后,将结果带入time.mktime()即可得到1332858769.0

从epoch转换成格式化时间

首先转换成9-item sequence,使用 <b>time.localtime()</b>
<b>time.localtime(1332858769.0)</b>
得到9-item sequence以后,使用 <b>time.strftime()</b>进行格式化,
<b>time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1332858769.0))</b>
最终得到2012-03-27 22:32:49

1,585 views, since 2012-03-27