我在c ++中写了一个impala udf,它在yyyyMMdd中提供了一年中的一周。但似乎无法找到将yyyyMMdd转换为c ++中的一周的方法。在java中,我可以使用Calendar,但是如何在c ++中使用它。
TIA
答案 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。它简单易用。