如果我从gettimeofday()
Unix 环境(例如 Linux、BSD)中获得或兼容的 time_t 值,是否有可用的紧凑算法能够告诉我该月内相应的周数?
理想情况下,返回值的工作方式类似于 中的%W
行为方式strftime()
,除了给出月份中的周而不是一年中的周。
我认为 Java 有一个W
格式化标记,它或多或少地像我要求的那样。
[下面的所有内容都是在 David Nehme、Branan 和 Sparr 发布答案后写的。]
我意识到要以与 类似的方式返回此结果%W
,我们要计算该月迄今为止发生的星期一的数量。如果该数字为零,则应返回 0。
特别感谢 David Nehme 和 Branan 的解决方案,让事情走上了正轨。返回[使用 Branan 的变量名称] 的代码位((ts->mday - 1) / 7)
表示当前日期之前已发生的完整周数。
但是,如果我们要计算到目前为止发生的星期一的数量,那么我们要计算包括今天在内的整数周数,然后考虑剩余的小数周是否还包含任何星期一。
为了弄清楚在取出整周后剩下的小数周是否包含星期一,我们需要考虑ts->mday % 7
并将其与一周中的某一天进行比较,ts->wday
。如果您写出组合,这很容易看出,但是如果我们确保日期不是星期日 ( wday > 0
),那么任何时候ts->wday <= (ts->mday % 7)
我们都需要将星期一的计数增加 1。这来自于考虑自月,以及根据第一个小数周内的当前日期,小数周是否包含星期一。
所以我会重写 Branan 的 return 语句如下:
return (ts->tm_mday / 7) + ((ts->tm_wday > 0) && (ts->tm_wday <= (ts->tm_mday % 7)));