Python时间模块无法处理1900年前的年份

4 投票
2 回答
6637 浏览
提问于 2025-04-16 20:47

我想从一个文本文件中转换出生日期。假设我有这样的数据:

fjsffk 1985-01-30
fkgskgks 1899-02-20

我尝试了下面的代码,但还是出现了错误:

import datetime

months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
          'August', 'September', 'October', 'November', 'December']
with open('file.txt', 'r') as f:
    for line in f.readlines():
        dob = line.rsplit(None, 1)[-1]  
        dt = datetime.strptime(dob, "%Y-%m-%d")          
        print "{0:} {1:}, {2:}".format(months[dt.month-1], dt.day, dt.year)

有没有什么解决办法呢,谢谢!

2 个回答

0

这里有一篇之前的帖子,里面可能有一些对你有帮助的想法:在Python中格式化日期字符串,适用于1900年之前的日期

8

根据Python的教程

strftime()这个函数能处理的年份范围在不同的平台上是有差异的。不过,不管是什么平台,1900年之前的年份是不能使用的。

请耐心听我说 - 我尝试了以下的解决方案,效果很好:

from datetime import datetime

mDt = datetime(1900,01,01)
dt = datetime.strptime('20-02-1899', "%d-%m-%Y")
resultString = datetime(dt.year + (mDt - dt).days/365 + 1, dt.month, dt.day).strftime('%B %d, %Y').replace('1900', str(dt.year))

或者类似这样的:

monthes = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
dt = datetime.strptime('20-02-1890', "%d-%m-%Y")
print "{0:} {1:}, {2:}".format(monthes[dt.month-1], dt.day, dt.year)

撰写回答