3.15 å—符串转æ�¢ä¸ºæ—¥æœŸÂ¶
问题¶
ä½ çš„åº”ç”¨ç¨‹åº�接å�—å—ç¬¦ä¸²æ ¼å¼�çš„è¾“å…¥ï¼Œä½†æ˜¯ä½ æƒ³å°†å®ƒä»¬è½¬æ�¢ä¸º datetime 对象以便在上é�¢æ‰§è¡Œé�žå—符串æ“�作。
解决方案¶
使用Pythonçš„æ ‡å‡†æ¨¡å�— datetime å�¯ä»¥å¾ˆå®¹æ˜“的解决这个问题。比如:
>>> from datetime import datetime
>>> text = '2012-09-20'
>>> y = datetime.strptime(text, '%Y-%m-%d')
>>> z = datetime.now()
>>> diff = z - y
>>> diff
datetime.timedelta(3, 77824, 177393)
>>>
讨论¶
datetime.strptime() 方法支æŒ�å¾ˆå¤šçš„æ ¼å¼�化代ç �,
比如 %Y 代表4�数年份, %m 代表两�数月份。
还有一点值得注æ„�çš„æ˜¯è¿™äº›æ ¼å¼�化å� ä½�符也å�¯ä»¥å��过æ�¥ä½¿ç”¨ï¼Œå°†æ—¥æœŸè¾“å‡ºä¸ºæŒ‡å®šçš„æ ¼å¼�å—符串形å¼�。
比如,å�‡è®¾ä½ 的代ç �ä¸ç”Ÿæˆ�了一个 datetime 对象,
ä½ æƒ³å°†å®ƒæ ¼å¼�化为漂亮易读形å¼�å�Žæ”¾åœ¨è‡ªåŠ¨ç”Ÿæˆ�的信件或者报告的顶部:
>>> z
datetime.datetime(2012, 9, 23, 21, 37, 4, 177393)
>>> nice_z = datetime.strftime(z, '%A %B %d, %Y')
>>> nice_z
'Sunday September 23, 2012'
>>>
还有一点需è¦�注æ„�的是, strptime() 的性能è¦�æ¯”ä½ æƒ³è±¡ä¸çš„差很多,
å› ä¸ºå®ƒæ˜¯ä½¿ç”¨çº¯Python实现,并且必须处ç�†æ‰€æœ‰çš„系统本地设置。
å¦‚æžœä½ è¦�在代ç �ä¸éœ€è¦�è§£æž�大é‡�的日期并且已ç»�知é�“了日期å—ç¬¦ä¸²çš„ç¡®åˆ‡æ ¼å¼�,å�¯ä»¥è‡ªå·±å®žçŽ°ä¸€å¥—è§£æž�方案æ�¥èŽ·å�–更好的性能。
æ¯”å¦‚ï¼Œå¦‚æžœä½ å·²ç»�知é�“æ‰€ä»¥æ—¥æœŸæ ¼å¼�是 YYYY-MM-DD ï¼Œä½ å�¯ä»¥åƒ�下é�¢è¿™æ ·å®žçŽ°ä¸€ä¸ªè§£æž�函数:
from datetime import datetime
def parse_ymd(s):
year_s, mon_s, day_s = s.split('-')
return datetime(int(year_s), int(mon_s), int(day_s))
实际测试ä¸ï¼Œè¿™ä¸ªå‡½æ•°æ¯” datetime.strptime() å¿«7å€�多。
å¦‚æžœä½ è¦�处ç�†å¤§é‡�的涉å�Šåˆ°æ—¥æœŸçš„æ•°æ�®çš„è¯�,那么最好考虑下这个方案ï¼�