【问题标题】:JSON Schema for DateTime Validation in Python - AWS LambdaPython 中用于日期时间验证的 JSON 架构 - AWS Lambda
【发布时间】:2021-10-09 22:57:49
【问题描述】:

我目前有一个需要日期时间验证的 JSON 架构。

"type": "array",
    "items": {
      "type": "object",    
      "properties": {
          "activeFrom": {"type": "string", "format": "datetime", "pattern": ********},
      }
... 

验证应该存在,以便

  1. 日期格式为 YYYY-MM-DDTHH:MM:SS.00-00:00 表示(年-月-日"T"时:分:秒.毫秒-TimeZoneHour:TimeZoneMinute) GMT 时区 = 00:00 示例:2022-11-12T16:32:21.00-00:00
  2. 不接受错误日期(即 2 月 31 天,或包含闰年)

我尝试了许多不同的模式 (******),但似乎找不到一种有效的模式。

如果此问题结构不正确,对于 SO 来说是新的,请感谢任何帮助和道歉 :)

【问题讨论】:

  • 您拥有的格式基于ISO 8601,因此可以使用Python 3.7+ 标准库的fromisoformat 将字符串解析为日期时间对象。如果失败,则无效。但是:请注意,该方法还解析例如仅日期字符串。
  • 顺便说一句。如果您尝试了一些无法解决问题的方法,最好将其添加到问题中,以向读者展示您离开的地方。

标签: python validation datetime lambda schema


【解决方案1】:

我认为这会以您正在寻找的方式检查日期。

首先pip install python-dateutil

编辑:已更改以下 cmets。

from dateutil.parser import parse, ParserError
from datetime import timedelta


def check_date_is_legit(input_date):
    """
    Checks if an input_date is legitimate
    :param input_date: string, date to check.
    :return result: False if the date isn't legit and True if it is.
    """

    try:
        parsed = parse(input_date)
        if parsed.tzname() == 'UTC':
            result = True
        else:
            result = False
    except ParserError:
        result = False

    return result

【讨论】:

  • 啊,是的,我错过了。它实际上与 UTC 相同,因此请在上面进行编辑。
  • 感谢更新。问题是,OP 基本上想要验证字符串是否以 ISO 8601 格式表示日期和时间,因此 UTC 偏移量很可能不是零 - 这意味着首先断言 UTC 没有多大意义。
  • 使用适当的strftime directive 解析到日期时间对象可能更合适;另请参阅我对这个问题的评论。
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 2013-06-03
  • 2014-02-09
  • 1970-01-01
相关资源
最近更新 更多