2014-09-28 4 views
-1

Я пишу impala udf в C++, который получает неделю года, когда предоставляется дата в yyyyMMdd. Но, похоже, не удалось найти способ конвертировать yyyyMMdd в неделю года в C++. В java я могу использовать Calendar, но как это сделать в C++.C++: получить номер недели от yyyyMMdd

ТИА

ответ

3

Вы можете использовать только std::mktime от <ctime>. Пример:

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

После звонка регулируется дата.tm_wday (0 = воскресенье). date.tm_yday также настраивается.

Чтобы получить неделю в год, используйте: (date.tm_yday-date.tm_wday+7)/7

Этот расчет возвращает 1 для первой полной недели (а именно, первую неделю с воскресенья в нем в течение года, в том числе 1 января в годы, которые начинаются с Воскресенье); и 0 дней в первой частичной неделе.

+0

@ H Walters: tm_wday дает день с воскресенья, но то, что я хочу, - это номер недели в этом году. Как и Calendar.week_of_year в java. –

+0

Я не уверен, что вы можете сделать «точно так же, как» week_of_year, потому что я не уверен, что легко получить предпочтения локали. Но mktime также заполнит tm_yday для вас, например, (date.tm_yday-date.tm_wday)/7 будет подсчетом баз данных (например, в первую неделю). –

0

Использование подталкивание :: Дата library.It простой и легкий в использовании.

Смежные вопросы