【问题标题】:Guessing the date format python猜测日期格式python
【发布时间】:2014-04-25 08:59:40
【问题描述】:

我正在 Python 模块中编写一个方法,试图让用户的生活更轻松。此方法实现在该日历中创建事件。

def update_event(start_datetime=None, end_datetime=None, description=None):
'''
Args:
  start_date: string datetime in the format YYYY-MM-DD or in RFC 3339
  end_date: string datetime in the format YYYY-MM-DD or in RFC 3339
  description: string with description (\n are transforrmed into new lines)
'''

如果用户指定 start_date 或 end_date,则应进行检查以确定日期是 YYYY-MM-DD 格式还是日期时间 RFC 3339 格式。

if (start_date is not None):
    # Check whether we have an date or datetime value
    # Whole day events are represented as YYYY-MM-DD
    # Other events are represented as 2014-04-25T10:47:00.000-07:00
    whole_day_event = False
    try:
        new_start_time = datetime.datetime.strptime(start_date,'YYYY-MM-DD')
        # Here the event date is updated
        try:
            new_start_time = datetime.datetime.strptime(start_date,'%Y-%m-%dT%H:%M:%S%z')
            #Here the event date is updated
        except ValueError:
            return (ErrorCodeWhatever)
    except ValueError:
        return (ErrorCodeWhatever)

这是一个好方法吗?我可以以更好的方式检查我收到的日期吗? 谢谢!

【问题讨论】:

  • 你应该raise错误,不要return他们。
  • 你说得对,我只是完成代码来发布问题

标签: python exception datetime strptime


【解决方案1】:

dateutil.parser.parse 可用于尝试将字符串解析为 datetime 对象。

from dateutil.parser import parse

def update_event(start_datetime=None, end_datetime=None, description=None):
    if start_datetime is not None:
        new_start_time = parse(start_datetime)

        return new_start_time

d = ['23/04/2014', '24-04-2013', '25th April 2014']

new = [update_event(i) for i in d]

for date in new:
    print(date)
    # 2014-04-23 00:00:00
    # 2013-04-24 00:00:00
    # 2014-04-25 00:00:00

【讨论】:

  • 谢谢!不知道这个:)
  • 没问题,很高兴为您提供帮助。如果你觉得我的回答对你有帮助,可以Accept my Answer
【解决方案2】:

扩展@Ffisegydd 答案,您还可以像这样指定您想要的目标日期时间格式:-

from dateutil.parser import parse

def update_event(start_datetime=None, end_datetime=None, description=None):
    if start_datetime is not None:
        new_start_time = parse(start_datetime)

        return new_start_time

d = ['06/07/2021 06:40:23.277000','06/07/2021 06:40','06/07/2021']

new = [update_event(i) for i in d]

for date in new:
    print(date.strftime('%Y/%m/%d %H:%M:%S.%f'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多