QT获取某个日期是第几周

因上一版函数测试出现和1月1日同一个周一(1-7),时会出现小一周的情况,如2022年1月8号被识别成第一周。

新改成以下方式:

ceil((start.daysTo(value) - count) /7.0) + 1;

不足两位的补0处理,确保返回值为四位的周别格式。


QString class::getWeek(QDateTime value)
{
    int result = -1; 
    QDateTime start = QDateTime::fromString(value.toString("yyyy") + "0101", "yyyyMMdd");

    int myWeek = start.date().dayOfWeek();
    int count = 7 - myWeek;  // 差值超过该值为下一周
 

    double num = start.daysTo(value); 
    result = ceil((start.daysTo(value) - count) /7.0) + 1; 

    QString str = "";
    if(result < 10)
        str = "0" + QString::number(result);
    else
        str = result;
    str = value.toString("yy") + str;
    return str;

}

---------------------------------------------------------旧版分割线---------------------------------------------------------

基于QT的QDateTime、QDate函数获取周几和日期间隔(闰年等计算由QT调用库调整返回)

获取第几周的函数:

// 计算传入时间是当年第几周
int class::getWeek(QDateTime value)
{
    int result = -1;    // 返回结果 
    // 获取当年第一天,用于判定第一周有几天
    QDateTime start = QDateTime::fromString(value.toString("yyyy") + "0101", "yyyyMMdd"); 

    int myWeek = start.date().dayOfWeek();    // dayOfWeek为获取周几(1~7)
    int count = 7 - myWeek;  // 第一周包含count+1天 
    // daysTo为返回调用日期到参数日期的天数(参数日期早于调用日期则返回负数)
    double num = start.daysTo(value)/7.0;
    result = ceil(num);    // ceil为向上取整函数 
    // 因第一周大多不满7天,所以下一周需判定第一周的天数(取余)
    if((start.daysTo(value) % 7) - count > 0)
        ++result;

    return result;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值