- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
指定日期时:
datetime.datetime(2011, 8, 15)
我怎么知道这是这个月的第三周?
如果我想要这个日期怎么办?
datetime.datetime(2011, 2, 28) //should return 4
datetime.datetime(2011, 8, 29) //should return 5
我知道如果给定的日期是闰年(bissextile),只有二月有 4 周
最佳答案
其他答案中显示的模数风格方法可能会产生误导。想象一年中的几周。在任何 365 天的一年中,有 52 个 7 天的 block ,还剩下一天。因此,如果我第一年的第 52 周在 12 月 30 日结束,我还有 12 月 31 日要担心。
我可以或者考虑一年中有 53 个星期,第 53 个星期是 12 月 31 日、1 月 1 日、1 月 2 日、1 月 3 日……或者,更传统地说,我认为明年的第一周实际上是从 12 月 31 日开始的。这就是您的日记袖珍本的做法。
当然,这意味着明年的第 52 周不是现在的 12 月 30 日,而是 12 月 29 日。每年它都会一点一点地倒退,直到第 6 年,我们将第 52 周的结束时间倒退了 6 天(并且为了更好的衡量标准而加入了一个闰日),所以 2017 年的整个第一周都是包含在 2016 年,那将是愚蠢的。所以 2016 年将有 53 周。
完全相同的逻辑适用于月份,但可能更难发现。不幸的是,您选择了 2011 年 8 月,它有一个巧妙的安排,即每月 1 号从星期一开始。
>>> print calendar.month(2011,8)
August 2011
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
>>> print calendar.month(2011,9)
September 2011
Mo Tu We Th Fr Sa Su
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
8 月 29 日在 8 月的第 5 周,但按照同样的逻辑,9 月 1 日、2 日、3 日和 4 日也将在 8 月的第 5 周,因此不能在 9 月的第 1 周。
所以 9 月 29 日,按照简单的天数除以 7 的方法,是在 9 月的第 5 周,但是看看上面的日历,如果 9 月 1-4 日是在 8 月,那么 9 月 29 日是在第 4 周九月。
这完全取决于您对一周何时开始的定义。
import datetime
import calendar
# I am assuming that the first week of a month starts with the first monday of a month...
#I *think* my logic is OK - if Monday (0) is the start of the week, then
#any dayof the month minus its own day of week (0,1,2...) must be positive
#if that day is on or after the first monday of the month
def week_of_month(tgtdate):
days_this_month = calendar.mdays[tgtdate.month]
for i in range(1, days_this_month):
d = datetime.date(tgtdate.year, tgtdate.month, i)
if d.day - d.weekday() > 0:
startdate = d
break
# now we canuse the modulo 7 appraoch
return (tgtdate - startdate).days //7 + 1
tgtdates = [datetime.date(2011, 8, 29),
datetime.date(2011, 8, 1)
]
for tgtdate in tgtdates:
print tgtdate,
print "is in week %s" % week_of_month(tgtdate)
print calendar.month(tgtdate.year,tgtdate.month)
# 2011-09-29 is in week 4
# 2011-09-01 is in week 0
# September 2011
# Mo Tu We Th Fr Sa Su
# 1 2 3 4
# 5 6 7 8 9 10 11
# 12 13 14 15 16 17 18
# 19 20 21 22 23 24 25
# 26 27 28 29 30
# 2011-08-29 is in week 5
# 2011-08-01 is in week 1
# August 2011
# Mo Tu We Th Fr Sa Su
# 1 2 3 4 5 6 7
# 8 9 10 11 12 13 14
# 15 16 17 18 19 20 21
# 22 23 24 25 26 27 28
# 29 30 31
以上,第 0 周表示该周不被视为本月的一部分。所以 9 月 1 日是 8 月的第 5 周。
注意
我想对@unutbu 的回答发表评论,但我想我没有足够的分数。模 7 方法在 2011 年 9 月失败。
>>> d = datetime.date(2011,9,28)
>>> (d.day-1)//7+1
4
>>> d = datetime.date(2011,9,1)
>>>
>>> (d.day-1)//7+1
1
从上面的日历来看,9 月 1 日在第一周,但这意味着 28 日不能在第 4 周 - 它必须在第 5 周,或者 1 日在第 0 周...
关于Python:一个月中的周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029261/
我希望你能用一些代码来帮助我,它根据系统日期计算周数。 我有一个文本框 WeekNum ,我想显示 CommandButton1_Click 时的周数被激活。 我找到了有关如何从给定日期计算周数的文章
有没有一种好方法可以让年份+周数转换为R中的日期?我尝试了以下方法: > as.POSIXct("2008 41", format="%Y %U") [1] "2008-02-21 EST" > as
我有一个带有日期列的 mysql 表,我想以某种模式打印我的表,在同一列中,它应该将日期打印为日期(周号)或日期周号。 例如2014-06-05-第 22 周或 2014-06-05(第 22 周)。
我想以字符串格式从给定日期获取 ISO 周数,其中星期一是一周的第一天,包含一年中第一个星期四的那一周被认为是第一周。 从其他答案来看,我认为 strftime("2017-11-18", forma
我正在尝试创建一个脚本,该脚本在设定的时间段(上个月的 23 日和本月的 23 日)内获取工作日、日历日和工作日的计数。 我有以下脚本,我尝试使用 Worksheet Functions 但它不起作用
我确信我在这里忽略了一些非常基本的东西,但在查询和谷歌搜索大约一个小时后我无法理解它。 我已经有一个日期表了,如果有帮助的话。它填充了过去几年的日期,并通过服务器上的作业运行的存储过程每晚更新。 我需
如果在 MySQL 中只有星期几、周数、月份和年份,是否有某种方法可以获取日期? 例子: 我想知道这个参数是哪一天: 年份:2014 月份:9 月 (09) 一年中的周数:37 或 9 月的周数:3
我需要一个选择菜单(下拉菜单),其中周数为 1 到现在 + 10 周。所以我做了: week '.$x.'';
我有以下 Pandas 系列,想获得该日期的 GPS 周数: import pandas as pd from pandas import Timestamp times = pd.Series([T
我需要在我的自定义日历中设置事件,这些事件将根据选定的周期重复,即每天、每周、每月或每年。我有以毫秒为单位的开始和结束日期。 问题: 是否有任何日历或日期 API,我们可以从中计算两毫秒之间的天数、周
以下查询返回周号。 53,我认为 02-Jan-2017 是 2017 年第一周的开始。 SELECT TRUNC(CL_DT, 'IW') AS WK_STARTDATE, TRUNC
我有两个 datetime 对象;开始日期和结束日期。我需要枚举两者之间的天数、周数和月数,包括在内。 理想情况下,结果将采用 datetime 格式,但任何兼容的格式都可以。周和月由与周/月的第一天
我有一个简单的 SQL 用于计算 SQLite 报告中的周数 SELECT STRFTIME('%W', 'date_column') 2009-2012 年是正确的。在 2013 年,我总是得到错误
我有如下四个单元格,我想将它们组合在一个单元格中作为一个短日期: A1: Year A2: Month A3: Week number A4: Week day 现在我想要,Excel 查看上面的单元
如何确定 Windows 批处理文件中的 ( ISO 8601 ) 周数? 不幸的是WMIC PATH WIN32_LOCALTIME GET/FORMAT:LIST只有WeekInMonth...
我正在尝试从给定日期创建 N 周,并且周列表应排除属于该周的周。 例如,如果我给出今天的日期,那么我想生成排除本周的周数至 N 周。 下面是满足我的目的的示例,但我无法创建 N 周数,这段代码也打印当
我有一个 GPS 设备,可以将一些对象(包括 GPS 时间)发送到我的服务器。 它以周数的格式出现,秒到一周。 我想将其转换为日期时间格式。我为此找到了一些代码,但我发现的只是如何将周数转换为日期,不
我正在尝试编写一个函数来计算设备需要检查的下一个日期。我正在使用下面的代码(它不完整。) function get_next_check(){ $today = date(get_option
我有这样一个日期:171115 183130 (17-11-15 18:31:30)。我使用的 API 要求我根据周数提供日期,但由于它用于 GPS 服务,因此需要是从 1980 年(第一个纪元)开始
所以我正在为 Android 开发一个小的储蓄应用程序。我有三个我需要处理的值(value)观。我有每日储蓄金额的值(value),每月储蓄的值(value),以及年度储蓄的值(value)。然后我想
我是一名优秀的程序员,十分优秀!