尝试在Python中找出用户出生日期和现在日期之间的差异

时间:2014-05-04 13:04:19

标签: python datetime user-input datediff

我正在学习python(初学者)并且已经设置了一个任务来编写一个程序来查找用户出生日期之间的天数差异,现在用Python编写。我知道如何计算现在的时间(datetime.now)以及如何要求用户输入内容(raw_input)。但是,这些答案的格式不同,因此无法相互减去。有没有办法将它们转换成相同的格式,或者会切片(不确定这是否是正确的术语 - 所以接力棒[0:3] - 单词接力棒中的前4个字符)然后变成整数,然后减去工作。堆栈溢出有一些其他的答案,使用strptime(不知道这是什么)。但是,这些帖子谈到减去已经采用相同格式并且程序已知的两个日期(即,不涉及使用输入)。以下是这些帖子: How do I calculate number of days betwen two dates using Python? python date difference in minutesHow do I find the time difference between two datetime objects in python? 我希望这些信息足以让somone能够提供帮助。如果有人能够帮助我,我将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

看来您的问题是:"如何将用户输入转换为日期时间(或日期)对象?"。您可以用固定格式询问日期,例如" yyyy-mm-dd":

from datetime import datetime

# read birth day in yyyy-mm-dd format
while True:
    datestr = raw_input("Input your birthday (yyyy-mm-dd): ")
    try:
        birthday = datetime.strptime(datestr, "%Y-%m-%d")
    except ValueError as e:
        print("error: %s\nTry again." % (e,))
    else:
        break

number_of_days_since_birthday = (datetime.utcnow() - birthday).days

注意:它忽略了小时和时区的差异。

如果你知道你的生日时间和地点(时区);你可以获得更精确的结果:

from datetime import datetime
import pytz # $ pip install pytz
from tzlocal import get_localzone # $ pip install tzlocal

# assume you are in the same timezone where you were burn
# otherwise specify the timezone explicitly e.g.,
# timezone = pytz.timezone('Europe/London')
timezone = get_localzone()

# read birth day
while True:
    datestr = raw_input("Input your birthday (yyyy-mm-dd HH:MM:SS): ")
    try:
        birthday = datetime.strptime(datestr, "%Y-%m-%d %H:%M:%S")
    except ValueError as e:
        print("error: %s\nTry again." % (e,))
    else:
        break

# assume no DST transitions during birth
birthday = timezone.localize(birthday)
# ignoring leap seconds
birthday_timedelta = (datetime.now(pytz.utc) - birthday)
number_of_days_since_birthday = birthday_timedelta.total_seconds() / 86400. 
print(number_of_days_since_birthday)