自定义dateutil.parser世纪推理逻辑

2024-02-20

我正在处理具有两位数年份的旧文本文件,其中默认世纪逻辑dateutil.parser似乎效果不太好。例如,珍珠港袭击事件并未发生dparser.parse("12/7/41")(返回 2041-12-7)。

回滚到 1900 年代的内置世纪“阈值”似乎发生在 66 岁:

import dateutil.parser as dparser
print(dparser.parse("12/31/65")) # goes forward to 2065-12-31 00:00:00
print(dparser.parse("1/1/66")) # goes back to 1966-01-01 00:00:00

出于我的目的,我想将此“阈值”设置为 17,以便:

  • "12/31/16"解析至 2016-12-31 (yyyy-mm-dd)
  • "1/1/17"解析为 1917-01-01

但我想继续使用这个模块,因为它的模糊匹配似乎运行良好。

The 文档 http://dateutil.readthedocs.io/en/stable/examples.html没有识别执行此操作的参数...是否有一个我忽略的参数?


这没有特别详细的记录,但您实际上可以使用以下命令覆盖它dateutil.parser。第二个参数是parserinfo对象,您将关心的方法是convertyear. The 默认实现 http://dateutil.readthedocs.io/en/stable/_modules/dateutil/parser.html#parserinfo.convertyear是什么给你带来了问题。您可以看到,它对世纪的解释是基于当前年份加上或减去五十年。这就是为什么你会在 1966 年看到转变。明年将是 1967 年。:)

由于您个人使用它并且可能有非常具体的需求,因此您不必非常通用。如果它适合您,您可以做这样简单的事情:

from dateutil.parser import parse, parserinfo

class MyParserInfo(parserinfo):
    def convertyear(self, year, *args, **kwargs):
        if year < 100:
            year += 1900
        return year

parse('1/21/47', MyParserInfo())
# datetime.datetime(1947, 1, 21, 0, 0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义dateutil.parser世纪推理逻辑 的相关文章

随机推荐

  • Jupyter Notebooks 中的 Python 版本和环境的 VSCode 问题

    Issue 我遇到的问题是 Python 的环境和版本与 VSCode 中的设置不匹配 并导致我尝试在 Jupyter 笔记本中使用的包出现问题 我使用的是安装了 Python 3 9 1 包括旧版本 和 Visual Studio Cod
  • IActionFilter 和 IAuthorizationFilter 之间的区别

    我只是想知道两者之间是否有什么区别IActionFilter and IAuthorizationFilter 我假设我们可以在下面实现相同的逻辑IActionFilter可能有IAuthorizationFilter 真的吗 Thanks
  • 从 C++ 中的 std::string 中删除空格

    在 C 中从字符串中删除空格的首选方法是什么 我可以循环遍历所有字符并构建一个新字符串 但有更好的方法吗 最好的办法就是使用算法remove if http en cppreference com w cpp algorithm remov
  • jQuery UI:日期选择器将年份范围下拉设置为 100 年

    使用日期选择器时 年份下拉菜单默认仅显示 10 年 用户必须单击去年才能添加更多年份 我们如何将初始范围设置为 100 年 以便用户默认看到一个大列表 function InitDatePickers datepicker datepick
  • GZipStream 进行 gzip 压缩,但解压缩文件最终会出现“数据意外结束”

    有谁知道为什么我在解压缩 gzip 文件时收到 数据意外结束 错误消息 为了验证字节数据没有损坏 我使用FooTest4 csv写入文件并能够成功打开该文件 两者都是 FooTest3 csv gz and FooTest2 csv gz解
  • 如何忽略 PHP 中未定义的变量错误[重复]

    这个问题在这里已经有答案了 我最近设置了一个新的网络服务器 但遇到了未定义的变量错误 如果我在没有初始化的情况下使用变量 则会出现错误 源代码没有改变 只有 LAMP 环境可以 你会如何解决这个问题 Thanks Well 您应该定义所有变
  • SVG viewBox 反转 Y 坐标

    我正在使用 SVG 在 HTML 页面中绘制不同的形状 这些不同的形状是从 Microsoft Sql Server 中的空间数据库的几何对象中检索的 我面临的问题是坐标系统 Svg 和 Microsoft Sql Server 不同 0
  • 调整highlight.sector() 宽度和位置 - R 中的和弦图(circlize 包)

    我需要一些帮助来调整突出显示的部分chordDiagram 来自 circlize 包 我正在处理渔业上岸数据 渔船从一个港口出发 母港PORT DE 并将他们的捕获物降落在另一个港口 登陆港PORT LA 我正在处理扇贝活重 吨 上岸量S
  • 如何在 vim 中搜索没有前面“\r”的“\n”?

    如果 Vim 看到不一致的行结尾 则不会转换文件格式 我怎样才能找到那些 零宽度后向断言 如何在 vim 中搜索没有前面 r 的 n r
  • JAVA Quartz - 如果上一个作业仍在运行,则跳过作业并等待下一个计划时间

    我有一个 Java 解决方案 使用Quartz 2 2 3 我所拥有的是 我的工作类别已注释 DisallowConcurrentExecution为了避免并发 所以同一个作业不能每次运行一次 OK 它是一个 CRON 每 1 小时运行一次
  • R:使用paste()定义列名

    问题很简单 但我找不到解决方案 我想创建一个新的数据框 定义列的名称paste0 理想情况下 我想做这样的事情 其中一个不起作用 mydataframe lt data frame id 1 paste0 Here my column na
  • 当使用自定义动画的片段替换事务正在运行时暂停活动时出现幽灵行为

    我正在使用片段事务在按下按钮时在组件之间切换 为了使整体体验更好 我添加了自定义动画 将旧片段从左侧动画化 将新片段从右侧动画化 启动此事务的代码如下所示 supportFragmentManager beginTransaction se
  • 如何在 C# 中格式化日期时间,如“Oct. 10, 2008 10:43am CST”

    有没有一种干净的方法将 DateTime 值格式化为 Oct 10 2008 10 43am CST 我需要它带有正确的缩写和小写的 am 或 pm 等 我自己做过 但它很丑 所以我正在寻找不同的方法 Thanks 由于 tt 格式字符串说
  • PHP 绑定文本域失败

    我正在尝试在运行 PHP 7 1 的 CentOS 服务器上设置 PHP 国际化 这是我的目录结构 home project public html locale japanese LC MESSAGES messages po home
  • Django 检查字段是否为空?

    我从数据库中检索了一个对象 该对象有一个外键字段 其属性blank True 我如何检查它是否实际上留空 谢谢您的帮助 blank True只是告诉管理站点该字段可以留空 除非你设置null True同样 如果您尝试输入空白值 您的数据库也
  • 对具有多个条件的列表进行排序 Ruby on Rails

    我希望能够根据 4 个不同的标准对列表中的 12 支球队进行排名 我将有一个名为 Teams 的数据库表 每个团队将有各种列 例如 matches won matches lost 等 我想根据 matches won 按顺序显示它们 这很
  • 你能在 Mongoose 中为子文档定义实例方法吗?

    如果我在 Mongoose 中有一个架构 其定义如下 var subSchema new Schema some String var topSchema new Schema subs subSchema var topModel mon
  • MATLAB 绘图轴所在框中缺少黑线

    在 MATLAB 中绘制图形时 我注意到保存轴的黑盒部分丢失了 左侧和底部 我尝试过发出 box off box on 命令没有成功 你知道我可以做什么来获得轴上相应的黑线吗 Note 我正在使用 OpenGL 渲染器 set 0 Defa
  • Angular 通用元标记在页面源中不可见

    当我查看在我的角度通用项目的构造函数中设置标题和元标记的页面时 标题显示在选项卡中 当我单击 检查元素 并转到时 我可以在 html 中看到元标记和标题到 html 文档的头部 但是 如果您仅单击 查看页面源代码 则不会显示标签 也不会显示
  • 自定义dateutil.parser世纪推理逻辑

    我正在处理具有两位数年份的旧文本文件 其中默认世纪逻辑dateutil parser似乎效果不太好 例如 珍珠港袭击事件并未发生dparser parse 12 7 41 返回 2041 12 7 回滚到 1900 年代的内置世纪 阈值 似