python - 如何将日期字符串转换为日期对象?
问题描述
我正在做一个聊天机器人来预订房间。我创建了一个函数来检查在数据库中查找时询问的房间是否空闲。在某些时候,我尝试将条目开始和结束会议时间转换为带有 beeeing 的from_pendulum_to_tupple(day_startinghour)
元day_startinghour
组2019-04-18T14:00:00+00:00
def from_pendulum_to_tupple(date):
print("date: ")
print(date)
print("type : " + str(type(date)))
year = date.year
month = date.month
day = date.day
hour = date.hour
minute = date.minute
return (year, month, day, hour, minute)
然而我有一个 AttributeError: str
object has no attribute year
。事实上,错误信息是:
文件“C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\actions.py”,第 43 行,运行 booking_answer = make_a_booking(name_room, day, hour_start, duration) 文件“C :\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\booking.py”,第 94 行,在 make_a_booking room_available = is_the_room_available(name_room, day_only, pendulum_combined_day_and_hour_start, pendulum_combined_day_and_hour_end, cnx) 文件“C: \Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\booking.py”,第 52 行,在 is_the_room_available starting_hour_list.append(from_pendulum_to_tupple(start_time)) 文件“C:\Users\antoi\Documents\Programming\Nathalie\18_2_2019\starter-pack-rasa-stack\booking.py",第 14 行,在 from_pendulum_to_tupple year = date.year AttributeError: 'str' object has no attribute 'year' 127.0. 0.1 - - [2019-04-17 16:42:01]“POST /webhook HTTP/1.1”500 412 1.050171
day_startinghour
make_a_booking
在调用上述函数以了解房间是否在我们想要预订的时间使用之前,需要使用它来创建房间,一天零一个小时:
def make_a_booking(name_room, day, hour_start, duration):
print(name_room, day, hour_start, duration)
# connect to the localhost database
cnx = mysql.connector.connect(password='MySQL.2019', user="root", database="alex")
#day_only : get the parsed date
day_only = str(dateparser.parse(day).date())
# parse the hour in string inputed by the user and convert it the a pendulum object
hour_start_parsed = dateutil.parser.parse(hour_start, fuzzy_with_tokens=True)
pendulum_combined_day_and_hour_start = pendulum.parse(str(day_only) + " " + hour_start, strict=False)
# convert the duration in string inputed by the user and to seconds then in minutes
duration_in_seconds = convert_time(duration)
duration_in_minutes = duration_in_seconds / 60
# add the duration_in_minutes to the starting hour to get the hour start pendulum object
pendulum_combined_day_and_hour_end = pendulum_combined_day_and_hour_start.add(minutes = duration_in_minutes)
#print(pendulum_combined_day_and_hour_end)
# check if the room is available
room_available = is_the_room_available(name_room, day_only, pendulum_combined_day_and_hour_start, pendulum_combined_day_and_hour_end, cnx)
解决方案
使用dparser
:
import dateutil.parser as dparser
def from_pendulum_to_tupple(date):
print("date: {}".format(date))
date = dparser.parse(date,fuzzy=True)
year = date.year
month = date.month
day = date.day
hour = date.hour
minute = date.minute
return (year, month, day, hour, minute)
s = '2019-04-18T14:00:00+00:00'
print(from_pendulum_to_tupple(s))
输出:
date: 2019-04-18T14:00:00+00:00
(2019, 4, 18, 14, 0)
推荐阅读
- python - apsheduler python 未按计划运行
- matlab - 如何正确使用 col2im 功能?
- reactjs - 模块热更换系统通知 WebPack ZSH
- php - PHP 文件的元数据
- css - mat-select 样式显示默认值为block 不能更改?
- sql - 在存储过程优化方面,可以替代 join 中的强制转换函数吗?
- php - SQLSTATE [42000]:语法错误或访问冲突:1055 Laravel 5.8 MySQL
- node.js - 节点导出在控制台上写入两次..为什么?
- c# - 如何验证下载文件功能?
- elixir - 如何通过 Supervisor.init 启动命名代理?