【问题标题】:Python: Subtracting 6 hours from an input date and time?Python:从输入日期和时间中减去 6 小时?
【发布时间】:2021-06-01 13:53:35
【问题描述】:

我一直在研究使用 datetime ,但我似乎无法找到一种方法。

我要做的是让用户输入datereturn 那个日期是负6 小时。

例如

User input: "May 10 - 10:00 PM) 
Returns : "May 10 - 4:00 PM)

User input: "May 10 - 3:00 AM"
Returns:  "May 9 - 9:00 PM"

感谢@deceze,我最终得到了:

from datetime import datetime
from datetime import timedelta

inputDate = input("Date and time (DD/MM/YY) HH:MM: ")
date_time_str = inputDate

date_time_obj = datetime.strptime(date_time_str, '%d/%m/%y %H:%M')

finalDate = date_time_obj - timedelta(hours=6)
print(finalDate)

我想我现在正在寻找的只是找到一个 AM/PM 变量,它可以在 6 小时前的日期是前一天时提供帮助?

【问题讨论】:

  • 第 1 步:将其解析为 datetime 对象。第 2 步:从中减去 timedelta(hours=6)。 ——你尝试过第一步吗?
  • @deceze 最后是:from datetime import datetime from datetime import timedelta inputDate = input("Date and time (DD/MM/YY) HH:MM: ") date_time_str = inputDate date_time_obj = datetime.strptime(date_time_str, '%d/%m/%y %H:%M') finalDate = date_time_obj - timedelta(hours=6) print(finalDate) 只是想知道如何添加 AM/PM 我猜这样它可以自动调整?
  • 例如datetime.strptime("May 10 - 10:00 PM", "%B %d - %I:%M %p") - timedelta(hours=6) - 确保使用正确的parsing directive
  • @MrFuppes 我明白了 - 谢谢!感谢您提供的链接,它清除了很多东西。

标签: python python-3.x datetime input


【解决方案1】:

一个简单的方法是使用 timedeltas

首先,您将首先将用户输入转换为日期时间对象。像这样:

from datetime import datetime, timedelta

year = int(input('Enter a year\n'))
month = int(input('Enter a month\n'))
day = int(input('Enter a day\n'))
hour = int(input('Enter an hour\n'))
minute = int(input('Enter a minute\n'))
amorpm = input('Enter AM or PM\n')
if amorpm.lower() == 'pm':
    finalhour = hour + 12
finaltime = datetime(year, month, day, finalhour, minute)

现在,在你得到 datetime 对象后,你可以做减法。您从 datetime 对象中减去 timedelta。使用这种格式:object - timedelta(hours=6, minutes=0)。所以你会这样做:

newtime = finaltime - timedelta(hours=6, minutes=0)
print(newtime)

【讨论】:

    【解决方案2】:

    你最终得到的是一个很好的开始!使用 dateutil 库(您可以在命令行中使用 pip install python-dateutil 安装)解析用户输入可能是一个好主意,以确保您拥有在继续之前可以使用的有效日期时间。

    不确定您的具体要求,但您也可以使用带有 %p 指令的 strftime() 方法将 AM 或 PM 输出到控制台。您可以测试以下代码:

    import datetime
    import dateutil.parser
    
    inputDate = input("Date and time (DD/MM/YY) HH:MM: ")
    parsedInputDate = dateutil.parser.parse(inputDate)
    
    print(parsedInputDate)
    #output looks like this: 2021-06-02 09:00:00
    
    dto = datetime.datetime.strptime(str(parsedInputDate), '%Y-%m-%d %H:%M:%S')
    finalDate = dto - datetime.timedelta(hours=12)
    
    print(finalDate.strftime("%Y-%m-%d %I:%M:%S %p"))
    #output looks like this: 2021-06-01 09:00:00 PM (12H format)
    
    print(finalDate.strftime("%Y-%m-%d %H:%M:%S"))
    #output looks like this: 2021-06-01 21:00:00 (24H format)
    

    如果已经要求用户以 24 小时格式输入时间,则可能不需要额外的 AM/PM 变量。

    希望有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 1970-01-01
      • 2014-07-24
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      相关资源
      最近更新 更多