【问题标题】:Converting year quarter string like 01Q1 to datetime object将像 01Q1 这样的年季度字符串转换为日期时间对象
【发布时间】:2021-11-11 01:43:21
【问题描述】:

我想知道如何将01Q1(代表 2001 年第 1 季度)之类的字符串对象转换为 Python 中的日期时间对象。谢谢!

【问题讨论】:

  • 您认为 01Q1 应该是什么确切日期? 2001 年 1 月 1 日还是 2001 年 3 月 31 日?还是别的什么?
  • @AlexanderChzhen 是的,类似于 2001-03-01。还是您认为 2001-03-31 对季度数据更有意义?
  • 对于第 1 季度,您通常将 1 月 1 日作为季度开始或 3 月 31 日作为季度结束,而不是 3 月 1 日?
  • 请使用tour、阅读what's on-topic hereHow to Askquestion checklist,并提供minimal reproducible example。 “为我实现此功能”与此站点无关,因为 SO 不是免费的在线编码服务。你必须诚实地尝试,然后就你的算法或技术提出一个具体问题

标签: python python-3.x datetime python-datetime


【解决方案1】:

如果你熟悉语法并且知道int()函数是做什么的,那么下面的代码应该很容易理解

import datetime

def str_to_datetime_v1(s):
    year = 2000 + int(s[0:2])
    quarter_months = {"1": 1, "2": 4, "3": 7, "4": 10}
    month = quarter_months[s[3]]
    return datetime.datetime(year, month, 1)

def str_to_datetime_v2(s):
    year = 2000 + int(s[0:2])
    month = int(s[3]) * 3 - 2 
    return datetime.datetime(year, month, 1)

我做了一些测试。 Functions 在我的系统上的速度几乎相同,但 v1 快了几个百分点。

您可以将 quarter_months dict 创建移到函数之外,因为您不希望在每次调用时都重新创建它。在这种情况下,我得到了 14% 的加速。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2017-03-30
    • 1970-01-01
    • 2014-12-13
    • 2022-07-04
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多