繁体   English   中英

如何在python中格式化日期

[英]How to format a date in python

我目前正在做一个程序,其中存储用户信息,例如他们的名字、姓氏和出生日期。 我对高级 python 函数的经验不是很丰富,我尝试将出生日期声明为字符串值,但这会导致可以提供任何输入的问题,例如“24/05/98”或“24/ 05/1998"。

如何使输入仅适用于“DD/MM/YYYY”格式?

一般来说,让用户输入这样的结构化数据并不是一个好主意,“实际上可以提供任何输入”。

但是python-dateutil包在尝试适应方面做得很好。

from dateutil import parser

s1 = "24/05/98"
s2 = "24/05/1998"
s3 = "05/24/1998"

dt1 = parser.parse(s1)
dt2 = parser.parse(s2)
dt3 = parser.parse(s3)

print dt1           # 1998-05-24 00:00:00
print dt2           # 1998-05-24 00:00:00
print dt3           # 1998-05-24 00:00:00
print dt1 == dt2    # True
print dt1 == dt3    # True

显然,当它无法弄清楚输入时,这种好处就会崩溃,例如月份和日期在字符串中的顺序:

s4 = "1/2/15"       # Feb 1, 2015 in D/M/Y
s5 = "2/1/15"       # Feb 1, 2015 in M/D/Y

dt4 = parser.parse(s4)
dt5 = parser.parse(s5)

print dt4           # 2015-01-02 00:00:00
print dt5           # 2015-02-01 00:00:00
print dt4 == dt5    # False

编辑:根据您的评论,如果您知道数据的格式,则可以使用strptime

如果输入无法成功解析,给定您提供的模式(在这种情况下, %d/%m/%YDD/MM/YYYY ),将引发ValueError

from datetime import datetime

s1 = "24/05/1998"
s2 = "05/24/1998"
s3 = "24/05/98"

for s in [s1, s2, s3]:
    try:
        dt = datetime.strptime(s, "%d/%m/%Y")
        print(dt)
    except ValueError:
        print("Failed to parse: %s" % s)

输出:

1998-05-24 00:00:00           # Parse successful -- dt contains the datetime object
Failed to parse: 05/24/1998   # Parse failed
Failed to parse: 24/05/98     # Parse failed

试试这个代码,我希望它能解决你的问题。

from time import strptime

date = raw_input("Please enter a date in DD/MM/YYYY format: ")
try:
    parsed = strptime(date, "%d/%m/%Y")
except ValueError as e:
    print "Please retry: {0}".format(e)
#Do your work...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM