C++中上周一的时间戳

timestamp of last Monday in C++

本文关键字:时间戳 周一 C++      更新时间:2023-10-16

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

为什么没有第三方库?使用Howard Hinnant的仅标题日期库要容易得多,该库应该在未来的标准中可用:

#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";
}

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

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;                                                            
}