c++:从yyyyMMdd中获取周数

c++ : get week number from yyyyMMdd

本文关键字:获取 周数 yyyyMMdd c++      更新时间:2023-10-16

我正在用c++编写一个impala udf,当以yyyyMMdd提供日期时,它会在一年中的某一周出现。但似乎找不到用c++将yyyyMMdd转换为一年中的一周的方法。在java中,我可以给你日历,但如何在c++中实现它。

TIA

您可以从<ctime>使用std::mktime。示例:

std::tm date={};
date.tm_year=2014-1900;
date.tm_mon=9-1;
date.tm_mday=28;
std::mktime(&date);

通话后,date.tm_wday会进行调整(0=周日)。date.tm_yday也进行了调整。

要获取一年中的一周,请使用:(date.tm_yday-date.tm_wday+7)/7

此计算在第一个完整的星期(即一年中第一个有星期日的星期,包括从星期日开始的年份中的1月1日)返回1;对于第一个部分周的天数为0。

我在这里回答了这个问题,但为了完整性,我也会在这里重复:

从howardhinnant.github.io/iso_week.html:使用iso_week.h

#include <iostream>
#include "iso_week.h"
int main() {
    using namespace iso_week;
    using namespace std::chrono;
    // Get the current time and floor to convert to the sys_days:
    auto today = floor<days>(system_clock::now());
    // Convert from sys_days to iso_week::year_weeknum_weekday format
    auto yww = year_weeknum_weekday{today};
    // Print current week number of the year
    std::cout << "The current week of " << yww.year() << " is: " 
              << yww.weeknum() << std::endl;
    // Set any day
    auto any_day = 2014_y/9/28;
    // Get week of `any_day`
    std::cout << "The week of " << any_day.year() << " on `any day` was: " 
              << any_day.weeknum() << std::endl;   
}

它给出了输出:

The current week of 2019 is: W18
The week in 2014 on `any day` was: W09

使用boost::date库。它简单易用。