如果我从gettimeofday()获得time_t值或在Unix环境中兼容(例如,Linux,BSD),是否有一个紧凑的算法可以告诉我一个月内相应的周数?
理想情况下,返回值的工作方式类似于%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(ts-> tm_mday / 7)+((ts-> tm_wday> 0)&&(ts-> tm_wday <=(ts-> tm_mday%7)));
发布于 2019-03-04 10:23:42
如果您将第一周定义为该月的第1-7天,第二周为第8-14天,那么以下代码将起作用。
int week_of_month( const time_t *my_time)
{
struct tm *timeinfo;
timeinfo =localtime(my_time);
return 1 + (timeinfo->tm_mday-1) / 7;
}
https://stackoverflow.com/questions/-100000989
复制相似问题