c ++:从yyyyMMdd获取周数

时间:2014-09-28 06:12:46

标签: c++ datetime

我在c ++中写了一个impala udf,它在yyyyMMdd中提供了一年中的一周。但似乎无法找到将yyyyMMdd转换为c ++中的一周的方法。在java中,我可以使用Calendar,但是如何在c ++中使用它。

TIA

3 个答案:

答案 0 :(得分:3)

您可以使用std::mktime中的<ctime>。例如:

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天。

答案 1 :(得分:1)

我回答了here,但是为了完整起见,我也会在这里重复:

使用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

答案 2 :(得分:0)

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