如何在C++中使用date.h获取周一和周五的日期

编程语言 2026-07-11

使用Howard Hinnant的 date.h(我使用的是C++17),如何用这个库得到周一和周五的日期?

我可以用下面这个得到今天的日期:

auto todayDate = date::floor<date::days>(std::chrono::system_clock::now());

std::cout << date::format("%F", todayDate) << "\n";

但我想得到工作周(周一到周五)的日期

解决方案

要获取周一和周五的日期,可以通过改编这里的逻辑来实现,基于 Howard Hinnant的回答在此处 的思路:

auto todayDate = date::floor<date::days>(std::chrono::system_clock::now());
std::cout << date::format("%F", todayDate) << "\n";

auto mondayDate = todayDate - (date::weekday{ todayDate } - date::Monday);
std::cout << date::format("%F", mondayDate) << "\n";

auto fridayDate = mondayDate + (mondayDate - date::Thursday);
std::cout << date::format("%F", fridayDate) << "\n";

如果你需要Unix时间戳版本:

auto mondayTimestamp = mondayDate.time_since_epoch();
auto mondayDateSeconds = std::chrono::duration_cast<std::chrono::seconds>(mondayTimestamp).count();

auto fridayTimestamp = fridayDate.time_since_epoch();
auto fridaySeconds = std::chrono::duration_cast<std::chrono::seconds>(fridayTimestamp).count();

这对于新的C++20 <chrono> 库也应该适用,因为本质上它是基于Howard的库实现的。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章