美文网首页
Python日期和时间处理(三) - 周数转换

Python日期和时间处理(三) - 周数转换

作者: geekpy | 来源:发表于2019-03-26 16:11 被阅读0次

周数的转换

  • 日期转换周数
    当我们需要获取特定日期对应的周数的时候,通常我们使用如下方法:
from datetime import date
dt1 = date(2018, 10, 10)
dt2 = date(2018, 12, 31)
dt1.strftime("%V")   # output: '41'
dt2.strftime("%V")  # output '1'

可以看出周数显示的没有问题,但是对于d2,如果没有year会让我们无法清楚到底是2018年还是2019年的第一周,这会导致程序的一些错误。为避免这种混乱,我们需要一个函数来同时返回year和周数。

def get_week_number(dt):
    """get both year and week number of a specified date object
    
    :param dt: date or datetime object which you want to corresponding get week number
    :return: a tuple including both year and week number. (year, week_num)
    """
    year = dt.year
    month = dt.month
    week_num = int(dt.strftime("%V"))
    if dt.month == 12 and week_num == 1:
        return year + 1, week_num
    return year, week_num

调用结果如下:

get_week_number(d2)
# output: (2019, 1)
  • 通过周数转化为特定日期
    周数转化为特定日期时,我们其实不仅需要周数,还需要year和一周的第几天,这样才能知道具体是那一天,即:
    • year
    • week number
    • 一周的第几天

最先想到的方法是如下方法:

dt3 = datetime.strptime("2018-41-3", "%Y-%W-%w")
dt3  # output:  datetime.datetime(2018, 10, 10, 0, 0)

dt4 = datetime.strptime("2019-1-1", "%Y-%W-%w")
dt4  # output:  datetime.datetime(2019, 1, 7, 0, 0)

dt5 = datetime.strptime("2018-41-0", "%Y-%W-%w")
dt5  # output:  datetime.datetime(2018, 10, 14, 0, 0)

上面的示例dt3转换没有问题,但是对于dt4可以看出并不是我们想要的结果,我们会发现python在这里有一个bug的(当然也许只是计算方式不对,不论怎样,这里并没有遵循ISO的标准进行转换)。

另外一个问题是当我们想要获取第0天时,实际对应的是第7天(即周日)

解决这个问题需要安装一个新的第三方包isoweek,如下:

pip install isoweek

之后使用如下方法来获取对应的日期:

from isoweek import Week

dt6 = Week(2019, 1).monday()
dt6  # output: datetime.date(2018, 12, 31)

我们看到使用isoweek包,我们可以正确的将week number转化为对应的日期。另外需要说明的是iso的标准是从周一开始到周日。

相关文章

  • Python日期和时间处理(三) - 周数转换

    周数的转换 日期转换周数当我们需要获取特定日期对应的周数的时候,通常我们使用如下方法: 可以看出周数显示的没有问题...

  • Python datetime

    datetime是Python处理日期和时间的标准库 获取指定日期和时间 datetime转换为timestamp...

  • Python标准库之time和datetime

    1、python3日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Pyt...

  • Python基础(九): 时间日历

    Python 程序能用很多方式处理日期和时间, 转换日期格式是一个常见的功能 time模块: 提供了处理时间和表示...

  • python的time库最全使用方法

    @[toc] 日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Pytho...

  • Python3 日期和时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。Python 提供了一个 time 和...

  • Python 常见时间处理

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Python 提供了一个 time ...

  • Python--时间模块

    Python提供了很多方式处理日期和时间,转换日期格式是一个常见的功能,time和calendar模块可以用于日期...

  • Python 学习笔记12 - 常用内建模块

    datetime —— 处理日期和时间 获取当前日期和时间 获取指定日期和时间 datetime转换为timest...

  • python 获取当前时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。每个时间戳都以自从1970年1月1日午...

网友评论

      本文标题:Python日期和时间处理(三) - 周数转换

      本文链接:https://www.haomeiwen.com/subject/lsgwrqtx.html