Friday, December 4, 2009

datetime库时间处理

本来这个问题是很简单的. 就是时间的增加. 结果自己钉上了datetime的时间运算.

本来是好事, 但是杯具在后面:
1. date和time实例都无法进行时间运算, 只有datetime.datetime类才有.
2. 实例化datetime需要year, month等参数, 对于只使用datetime.time的运算而使用datetime.datetime有些不靠谱. (心中是这样想的, 想着懒, 想着代码合理)
3. timedelta无法没有strftime和strptime格式化函数

自己钉上了datetime.time对象(觉得datetime.datetime太多没有必要的功能)

杯具就是这样产生了.  把字符串解释出来, 然后实例:
start_time = datetime.timedelta(
                                                hours=hours,
                                                minutes = minutes,
                                                seconds = seconds,
                                                milliseconds = milliseconds
                                                )

太奶奶的杯具了~~~~~~~~~

后面发现, 实例化datetime.datetime, 使用strptime函数从"想像中的"方便. 如:

In [27]: datetime.datetime.strptime('0:00:40', '%H:%M:%S')
Out[27]: datetime.datetime(1900, 1, 1, 0, 0, 40)
* 其中包含的date已经被补上了UTC的开始时间

进行时间运算比想像中的方便:
In [30]: datetime.datetime(1900, 1, 1, 0, 0, 40) +  datetime.timedelta(seconds=1)
Out[30]: datetime.datetime(1900, 1, 1, 0, 0, 41)

只是多了一个date部分. (-_-), 为什么就不想开只眼闭只眼呢? 下面只使用time部分:

In [33]: a = datetime.datetime.strptime('0:00:40', '%H:%M:%S')
In [34]: a = a + datetime.timedelta(seconds=1)
In [35]: a.strftime("%H:%M:%S")
Out[35]: '00:00:41'


strptime的格式: '00:00:41' 与 '01:01:41' 的格式是否一样呢?

把时间转换成字符串, 一般都是使用库里的API. 补"0"的和不补的, 哪个是业界标准?

还好, 库的API比我想象的要完美得多:

In [36]: datetime.datetime.strptime('Thu, 08 Jun 2001 04:07:05', '%a, %d %b %Y %H:%M:%S')
Out[36]: datetime.datetime(2001, 6, 8, 4, 7, 5)

In [37]: datetime.datetime.strptime('Thu, 8 Jun 2001 4:7:5', '%a, %d %b %Y %H:%M:%S')
Out[37]: datetime.datetime(2001, 6, 8, 4, 7, 5)

两种都是标准, 呵呵~~~~

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.