我需要使用C ++获取本地时区中上周一的开始(00:00)的时间戳(time_t)。有什么简单的方法可以仅使用标准C ++而不使用第三方库吗?
答案 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;
}