算法:根据周数获取下一年日期工作类次类型

标签 algorithm datetime week-number

我实行 3 类倒制,每周换类。顺序为早类 (m)、晚类 (n) 和下午类 (a)。我固定的订单,即它永远不会改变,即使那个星期不工作也是如此。

我创建了一个函数来获取 ISO 周数。当我给它一个日期时,它会返回周数。

本周(第 48 号),例如,我早上工作,因此 48 % 3 = 0 → m = 0; n = 1; a = 2。 我将其保存到数组 shifts = ["m", "n", "a"]

这是简单的部分。但是年关将至,我需要解决一个问题。由于 52(2017 年的总周数)不能被 3 整除,并且不同年份的周数不同,模 0(对于 2017 年表示 m),意味着不同的其他东西年。

所以,真正的问题是什么是最快和最简单的算法(而不是最简单的最快),不需要人类可读,并解释(如果需要)它为什么/如何做它所做的事情。

我想到了一个(既不快也不简单):到已知周数。 & shift type combo 添加该周之后到年末的周数,并重新计算数组 shifts。

最佳答案

为什么要使用 ISO 周数? 假设您的周从某个特定的日子开始(星期一、星期日,由您决定)。您为类次 0 确定开始日期 d0,也是一周的开始。那么对于任何日期 d,您的类次是:

shift = floor(nbdays(d - d0) / 7) mod 3

如果您的系统在一周的起始日不同的不同地区工作,则可能会出现问题。在那种情况下,您应该为每个区域设置一个特定的 d0。如果你的 shift 在世界范围内都是一样的,你就没有问题。

关于算法:根据周数获取下一年日期工作类次类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47566814/

相关文章:

python - 当某些数据具有微秒而某些数据没有时使用 Strptime

c# - 基于 DateTime 的有序集合

python - Pandas :如何在毫秒间使用 between_time?

php - 如何让周从星期日开始?

java - 用 Joda-Time 解析周日期?

c++ - 在这四个库中,您最有可能使用哪个?

algorithm - scala中二叉树的最大深度

java - Joda时间周计算推理

php - 获取所有子类别的递归函数

java - 矩形可挠度的最小周长