[英]Python: Subtracting 6 hours from an input date and time?
我一直在研究使用datetime
,但我似乎无法找到一种方法来做到这一点。
我想要做的是让用户输入一个date
并return
那个日期是负 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 小时前的日期是前一天时,它可以提供帮助?
一个简单的方法是使用 timedeltas
首先,您首先将用户输入转换为日期时间 object。 像这样:
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)
现在,在您获得日期时间 object 后,您可以进行减法运算。 您从日期时间 object 中减去一个 timedelta。 使用这种格式: object - timedelta(hours=6, minutes=0)
。 所以你会这样做:
newtime = finaltime - timedelta(hours=6, minutes=0)
print(newtime)
你最终得到的是一个很好的开始! 使用dateutil库(您可以在命令行中使用pip install python-dateutil 安装)解析用户输入可能是一个好主意,以确保您在继续之前有一个有效的日期时间可以使用。
不确定您的具体要求,但您也可以将strftime()方法与%p指令一起用于 output 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 变量。
希望有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.