首页 > 解决方案 > 如何将日期字符串转换为日期对象?

问题描述

我正在做一个聊天机器人来预订房间。我创建了一个函数来检查在数据库中查找时询问的房间是否空闲。在某些时候,我尝试将条目开始和结束会议时间转换为带有 beeeing 的from_pendulum_to_tupple(day_startinghour)day_startinghour2019-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: strobject 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_startinghourmake_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)

标签: pythonpython-3.xdate

解决方案


使用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)

推荐阅读