首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Strptime格式

Python Strptime格式
EN

Stack Overflow用户
提问于 2014-05-09 16:07:34
回答 1查看 834关注 0票数 0

在python中,我遇到了一个日期时间问题。这是我的堆栈追踪:

代码语言:javascript
复制
28/09/12
Traceback (most recent call last):
  File "product-release-by-year.py", line 49, in <module>
    get_earliest_order_date(fin)
  File "product-release-by-year.py", line 25, in get_earliest_order_date
    date = datetime.datetime.strptime(order_date, '%d/%m/%Y').date()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '28/09/12' does not match format '%d/%m/%Y'

以及相关代码:

代码语言:javascript
复制
def get_earliest_order_date(fin):
    # CSV Headers
    product_col = 1
    order_col = 0

    f = open(fin, 'rb')
    try:
        reader = csv.reader(f, delimiter=";")
        next(reader, None) 
        for row in reader:

            product_name = row[product_col]

            order_date = row[order_col]
            print order_date

            date = datetime.datetime.strptime(order_date, '%d/%m/%Y').date()

            if product_name not in products:
                products[product_name] = date
            else:
                if date < products[product_name]:
                    products[product_name] = date
    finally:
        f.close()

据我所见,格式字符串应该是正确的吗?这个对strptime的调用在通过终端直接输入字符串时起作用。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-09 16:08:24

%Y预计,包括本世纪在内,将迎来四位数的。使用%y解析日期为2位数的年份.

演示:

代码语言:javascript
复制
>>> import datetime
>>> order_date = '28/09/12'
>>> datetime.datetime.strptime(order_date, '%d/%m/%Y')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '28/09/12' does not match format '%d/%m/%Y'
>>> datetime.datetime.strptime(order_date, '%d/%m/%y')
datetime.datetime(2012, 9, 28, 0, 0)

%ystrptime之后增加了一个世纪

%y 世纪内的一年(0-99)。如果不以其他方式指定一个世纪,则在69-99范围内的数值指二十世纪(1969至1999年)的年份;在00-68范围内的数值是指二十一世纪(2000-2068年)的年份。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23569257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档