在Python中计算用户出生日期与现在的天数差异

1 投票
1 回答
2009 浏览
提问于 2025-04-18 05:19

我正在学习Python(还是个初学者),老师给我布置了一个任务,要写一个程序来计算用户出生日期和现在之间的天数差。我知道怎么获取当前时间(用datetime.now)以及怎么让用户输入信息(用raw_input)。不过,这两者的格式不一样,所以没法直接相减。有没有办法把它们转换成相同的格式?或者我可以用切片(不太确定这个词用得对不对,比如说baton[0:3]就是取单词baton的前四个字符)然后把它们变成整数,再进行相减吗?在Stack Overflow上有一些其他的回答,提到了strptime(我不太明白这个是什么)。不过那些帖子讨论的是已经在同一格式下的两个日期相减,而不是用户输入的日期。这里有这些帖子: 如何用Python计算两个日期之间的天数?Python中日期之间的分钟差如何找到Python中两个datetime对象之间的时间差? 我希望这些信息能帮助到有人。如果有人能帮我,我会非常感激。谢谢!

1 个回答

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)

撰写回答