首页 > 解决方案 > 将自由文本用户回复转换为日期时间

问题描述

我试图找出一种巧妙的方法来获取用户的输入并将其存储在数据库中以便以后检索。

就上下文而言,这是一个 Discord 机器人,我试图在其中跟踪用户的日程安排。这个想法是用户可以说“&addtime 12/30/1 12pm CST”,机器人会记录他们将在 12/30/1/ 12pm CST 在线

我想跟踪时区的原因是我可以将所有时区转换为特定时区,这样时区就不会混淆。

因此,在有人在上面添加他们的时间之后,如果我(某人 PST)去检索人们何时在线,我可以输入“&schedules PST”并获取指定时区的所有时间。

我现在面临的问题是我可以在网上找到的所有日期时间示例都需要非常准确和具体的输入。我正在寻找一个更灵活的函数,它足够聪明,可以计算出日期时间。

标签: pythonpython-3.7

解决方案


用这个方法想通了。它只支持美国时区,但这足以满足我的需求:

from dateutil import parser
from dateutil import tz
import pytz    

def parse_date(self, msg):
        ET = tz.gettz('US/Eastern')
        CT = tz.gettz('US/Central')
        MT = tz.gettz('US/Mountain')
        PT = tz.gettz('US/Pacific')
        us_tzinfos = {'CST': CT, 'CDT': CT,
                      'EST': ET, 'EDT': ET,
                      'MST': MT, 'MDT': MT,
                      'PST': PT, 'PDT': PT}

        usertime = parser.parse(msg, tzinfos=us_tzinfos)
        servertime = usertime.astimezone(pytz.timezone("America/Phoenix"))

parse_date("12/30/20 12pm EST")

推荐阅读