试图在Python中找到用户出生日期和现在之间的天数差异

Posted

技术标签:

【中文标题】试图在Python中找到用户出生日期和现在之间的天数差异【英文标题】:Trying to find difference in days between user's date of birth and now, in Python 【发布时间】:2014-06-20 19:35:30 【问题描述】:

我正在学习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 minutes 和 How do I find the time difference between two datetime objects in python? 我希望这些信息足以让某人能够提供帮助。如果有人能够帮助我,我将不胜感激。谢谢!

【问题讨论】:

使用 datetime.strptime。是时候阅读了 会在python网站上吗? docs.python.org/2/library/… 还有:docs.python.org/2/library/… 相关:Converting string into datetime 【参考方案1】:

您的问题似乎是:“如何将用户输入转换为日期时间(或日期)对象?”。您可以以固定格式询问日期,例如“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)

【讨论】:

以上是关于试图在Python中找到用户出生日期和现在之间的天数差异的主要内容,如果未能解决你的问题,请参考以下文章

试图找到如何在两个日期之间从 SQL 数据库中提取数据 [重复]

MySQL日期时间的天,小时和分钟数

用java写用户在控制台按照“yyyy/mm/dd”的格式输入出生日期,请计算用户的年龄

使用 Google 登录 Android 获取用户的出生日期和性别

Python中出生日期的格式检查

求教用java编写一个程序要求给定一个日期值,计算若干天后的日期值,和给定两个日期计算它们之间相距的天