[英]c++ : get week number from yyyyMMdd
我正在用C ++寫一個Impala udf,當在yyyyMMdd中提供日期時,它將獲得一年的一周。 但是似乎找不到辦法用C ++將yyyyMMdd轉換為一年中的一周。 在Java中,我可以使用Calendar,但是如何在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 = Sunday)。 date.tm_yday也已調整。
要獲得一年中的星期,請使用: (date.tm_yday-date.tm_wday+7)/7
此計算返回第一個整周(即,該年中帶有星期日的第一周,包括從星期日開始的年份中的1月1日)的1; 在部分時段的第一天為0。
我在這里回答了這個問題 ,但是為了完整起見,我也會在這里重復一遍:
使用iso_week.h
的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庫。它簡單易用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.