C ++中上周一的时间戳

时间:2018-08-15 06:57:31

标签: c++ datetime time

我需要使用C ++获取本地时区中上周一的开始(00:00)的时间戳(time_t)。有什么简单的方法可以仅使用标准C ++而不使用第三方库吗?

2 个答案:

答案 0 :(得分:5)

为什么没有第三方库?使用Howard Hinnant's header only date library可以更轻松地完成此工作,该标准应该在将来的标准中提供:

#include "date.h"
#include <iostream>

int main()
{
    using namespace date;
    using namespace std::chrono;
    //auto now = sys_days(2018_y/August/12);
    auto now = floor<days>(system_clock::now());
    date::weekday day = weekday{ now };
    now -= day - Monday;
    std::cout << year_month_day(now) << "\n";
    time_t time = now.time_since_epoch().count();
    std::cout << time << "\n";
}

答案 1 :(得分:1)

这是我自己完成此任务的快速解决方案,我认为与一周中的任何一天一起工作都可以改进...

time_t get_monday_timestamp(time_t time)                             
{                                                                           
    tm* timeinfo = localtime(&time);                                        
    int wday=timeinfo->tm_wday;                                             
    int hour=timeinfo->tm_hour;                                             
    int min=timeinfo->tm_min;                                               
    int sec=timeinfo->tm_sec;                                               

    time_t SECONDS_IN_DAY = 60 * 60 * 24;                                   

    //monday should be 0 and sunday 6                                       
    wday--;                                                                 
    if(wday == -1)                                                          
    {                                                                       
        wday = 6;                                                           
    }                                                                       

    time -= wday * SECONDS_IN_DAY;                                          
    time -= (sec + 60 * min + 60 * 60 * hour);                              

    return time;                                                            
}