簡體   English   中英

c ++:從yyyyMMdd獲取星期數

[英]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.hiso_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM