首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C++中从std::chrono::year_month_day中获取工作日数

在C++中,可以使用std::chrono::year_month_day来表示日期,并且可以通过一些方法来计算工作日数。

首先,需要定义一个函数来判断给定的日期是否为工作日。工作日通常是指周一至周五,不包括周末和节假日。可以使用std::chrono::weekday来获取日期对应的星期几,然后判断是否为周六或周日。

代码语言:txt
复制
bool isWeekday(const std::chrono::year_month_day& date) {
    auto weekday = std::chrono::weekday(date);
    return weekday != std::chrono::Saturday && weekday != std::chrono::Sunday;
}

接下来,可以定义一个函数来计算两个日期之间的工作日数。可以使用循环来遍历两个日期之间的每一天,然后调用isWeekday函数来判断是否为工作日,并统计工作日的数量。

代码语言:txt
复制
int countWorkdays(const std::chrono::year_month_day& start, const std::chrono::year_month_day& end) {
    int workdayCount = 0;
    auto currentDate = start;
    while (currentDate <= end) {
        if (isWeekday(currentDate)) {
            workdayCount++;
        }
        currentDate += std::chrono::days(1);
    }
    return workdayCount;
}

使用示例:

代码语言:txt
复制
#include <iostream>
#include <chrono>

int main() {
    std::chrono::year_month_day start{std::chrono::year{2022}, std::chrono::month{1}, std::chrono::day{1}};
    std::chrono::year_month_day end{std::chrono::year{2022}, std::chrono::month{12}, std::chrono::day{31}};
    
    int workdayCount = countWorkdays(start, end);
    
    std::cout << "工作日数:" << workdayCount << std::endl;
    
    return 0;
}

输出结果:

代码语言:txt
复制
工作日数:261

在腾讯云的产品中,可以使用云函数SCF(Serverless Cloud Function)来运行C++代码。具体可以参考腾讯云SCF的官方文档:腾讯云SCF产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

再也不被时间束缚:C++ std::chrono时间库全面解析

这里将全面介绍C++ std::chrono时间库的使用,帮助读者理解其核心概念和各种功能,从而在编程更好地掌握时间的节奏,解放代码时间束缚。...目标:首先对C++ std::chrono时间库进行全面而清晰的概述,解释其在编程的重要性和作用。...除了基本的使用方法,还将探讨一些高级技巧和实践,时区处理、时间格式转换等。我们还将解决一些常见的时间相关问题,提供实用的技巧和最佳实践,更高效、准确地使用时间库,解放代码时间束缚。...二、C++ std::chrono时间库概述2.1、std::chrono命名空间的作用和用途C++ std::chrono命名空间是C++标准库的一个命名空间,它包含了一组用于处理时间和时间相关操作的类和函数...std::chrono命名空间是C++标准库的一部分,因此它具有跨平台的兼容性,并且在不同的操作系统中都能正常工作

46800
  • 使用vs2019进行Linux远程开发的方法步骤

    因此今天我们就来看下如何在Windows上使用Visual Studio 2019进行Linux远程开发以及如何避免常见的陷阱。...Visual Studio的跨平台开发功能简介 visual studio 2017开始微软推出了vs的跨平台开发功能,你可以在vs编辑代码,随后进行跨平台编译和远程调试,将原先我们需要手动完成的工作进行了自动化...vs进行远程开发分为两步: 创建远程环境的连接,随后让vs将远程环境的系统头文件同步到本地(也可以指定其他地方的头文件,后面会讲解),c++的代码补全只需要头文件即可。...在我们开始之前,首先要做点准备工作: 安装好vs2019,且勾选了c++ for Linux功能; 准备一个可用的Linux远程环境,例如配置了静态IP的Linux虚拟机,并且已经安装好了GCC工具链以及...本地编写和远程调试 至此你已经可以在vs编写面向Linux平台的代码了,自动补全可以正常工作: ? ? 可以看到Linux的头文件和结构体都已经可以识别了。

    4.3K40

    c++11:使用HowardHinnantdate.h解析ISO8601格式字符串,并解决时区问题

    C++11提供了std::get_time函数用于解析时间格式字符串,解析成功后将时间保存在std::tm结构。...下面是贴子抄来的使用HowardHinnant/date对ISO8601标准时间字符串解析的示例代码: #include "date.h" #include #include...第二个问题是如果字符串没有日期,只有时间(12:12:14),HowardHinnant/date不能正确解析,所以建议是要判断日期格式,如果日期字符串没有只有时间,还是用std::get_time...std::chrono::minutes& offset) abbrev 指定提供时区名字缩写,CST–中国标准时间(但这个参数似乎无效,我没有深究) offset 相对GMT时间以分钟为单位时区偏移...参见我的上一篇博客: 《c,c++:获取当前时区偏移》

    1.2K10

    C++:thread | condition_variable|mutex

    构造函数接受一个可调用对象(函数指针、函数对象、lambda 表达式等)作为参数。线程创建好之后,会自动运行所绑定的函数。...C++在这些系统调用接口的基础上,封装出了mutex类。 在C++,mutex(互斥量)是一种同步机制,用于防止多个线程同时访问共享资源,从而避免数据竞争和条件竞争等问题。...以下是一些C++std::condition_variable相关函数的使用范例: 1. std::condition_variable::wait 这个函数用于阻塞当前线程,直到条件变量被另一个线程唤醒...std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟工作 { std::lock_guard<std::...cv.wait(lck); } que.push(i); //通知其他一个线程,我生产完了 你们赶快去消费去吧 //其他线程得到该通知,就会等待状态-->阻塞状态--->获取互斥锁才能继续之星

    9810

    C++ 万年历项目实践:深入探索语言特性与系统级编程

    这些变化为使用 C++ 进行项目开发提供了更多的工具和特性。在这篇博客,我们将结合这些最新资讯,分享一次使用 C++ 完成万年历项目的开发实践之旅。...在实际项目中,选择合适的智能指针类型( std::unique_ptr 或 std::shared_ptr)取决于具体的需求和所有权关系。...: " << e.what() << std::endl; } return 0; } 在这个例子,我们添加了三个函数:getCurrentTime 用于获取当前系统时间点,getLocalTime...使用C++开发万年历项目,C++的基础知识入手,建立了日期类和日历类,通过面向对象的思想提高了代码的模块化和可复用性。在处理日期和时间时,我们合理运用指针,确保了内存操作的高效性。...在系统级编程,我们通过与操作系统的交互,获取系统时间等信息,展现了C++强大的系统级编程能力。通过模块化的设计,我们将项目结构清晰地分为日期类和日历类,使得大型项目的管理变得更加可控。

    37410

    C++ 异步编程脉络与示例

    引言 异步编程是现代软件开发不可或缺的一部分,尤其是在处理 I/O 操作、网络请求、用户界面响应等需要高并发场景时。C++ 作为一门底层语言,为开发者提供了多种异步编程的工具和方法。...std::future 允许你获取异步操作的结果,而 std::promise 则用于设置这个结果。通过 std::async 可以轻松地启动异步任务,并获取其结果。...例如,在并行计算、并发编程、网络请求等场景,可以使用 std::async 启动多个异步任务,并使用 std::future 获取结果。...在多线程编程,可以使用 std::promise 将结果工作线程传递到主线程。 3....写在最后 C++ 异步编程经历了回调函数到 std::future 和 std::promise,再到现代协程的演变。

    14310

    现代c++实现精确延时方法总结

    程序实现延时有很多种办法,但是有些不建议用。比如还在用sleep()或者空转计数的方式延时?要么移植性不好,要么不够精确且效率太低。这里总结下现代c++推荐的一种实现精确延时的方法。  ...为了能将获取到的时间转换成便于人类理解且具有普遍性的"时 分 秒"的计时方式, 我们需要引入一个常量,在 Windows下使用常量 CLOCKS_PER_SEC 来进行转换且 CLOCKS_PER_SEC...C++11开始,C++标准库提供了专门的线程休眠函数,使得你的代码可以独立于不同的平台,sleep的时间间隔纳秒到小时都有具体的定义。...(true) { auto duration = std::chrono::duration_cast(std::chrono...+ 的计时函数: clock()_荒原之梦网的博客-CSDN博客 std::chrono::high_resolution_clock简单测试 - 知乎 C++11 新的计时方法——std::chrono

    3.3K30

    OpenCV4 C++学习 必备基础语法知识二

    微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 前言 之前我写过一篇介绍学习OpenCV C++一些前置基础C++11的基础知识,主要是介绍了输出打印、各种常见数据容器,这里又整理了一篇...World, C++" << std::endl; // 毫秒 std::chrono::milliseconds ms(3); std::cout << ms.count() << std::endl...%S")<< std::endl; 运行结果如下: ? 支持毫秒、微秒、秒、支持获取系统的当前时间等。...02 数值转换 在OpenCV编程开发,有时候会读取数据文件,需要把数据字符(string)类型转为数值(number)类型,常见的有int、float、double、long等类型与string...::to_string(i) << std::endl; std::cout << std::to_string(l) << std::endl; // string到数值 const char*

    97140

    【C++11】 让多线程开发变得简单--线程

    C++ 11之前,C++语言并没有提供支持,想要开发多线程程序就要借助于操作系统提供的多线程接口,但是,这样并不能开发跨平台可移植的并发程序,C++11提供了多线程语言支撑,使得程序的可移植性大大提升。...1.1 创建线程 C++ 11创建一个线程是很简单的事情,只需要使用std::thread就可以轻松创建一个线程,我们要做的只是提供一个线程函数或者函数对象,创建线程时也可以同时给线程函数指定参数,...:可以将线程保存到一个容器。...: void foo() { std::cout<<"foo"<<std::endl; } void bar(int x) { std::cout<<"bar::x="<<x<<<em>std</em>::...,用来保护多线程同时访问的共享数据,在<em>C++</em> 11<em>中</em>,提供了多种互斥量,如下: <em>std</em>::mutex: 独占互斥 <em>std</em>::timed_mutex:带有超时的互斥量 <em>std</em>::recursive_mutex

    50410

    4.3 C++ Boost 日期时间操作库

    Boost库已被广泛应用于许多不同领域的C++应用程序开发网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。...3.1 字符串日期时间互转本节涉及的主要内容是如何使用Boost库的日期和时间模块来实现C字符串与日期时间的相互转换,其中包括字符串读取日期时间,将日期时间转换为字符串,常用日期时间格式和常见处理问题及其解决方案...在本节,我们首先介绍了boost库中常见的日期格式化输出控制字符,例如%Y、%m等,然后通过举例和代码示范的方式,演示了如何在日期对象中使用这些格式化字符,并将日期转为对应的字符串格式。...0;}3.10 时间基本操作本节主要介绍了boost库的一些时间基本操作,包括获取当前时间,计算时间差值,以及比较时间大小等等。...在本节,我们首先介绍了如何获取当前时间,包括获取时间点类型、日期类型、以及时间类型等等;然后,我们介绍了如何计算时间差值,包括使用时间持续类型、时钟类型等等;最后,我们介绍了如何比较时间大小,包括比较时间点和日期等等

    42640

    浅析C++RAII

    C++编程,RAII(Resource Acquisition Is Initialization,资源获取即初始化)是一种重要的编程范式,被广泛应用于管理资源的生命周期。...这种技术通过在对象的构造函数获取资源,而在析构函数获取顺序的逆序释放资源,从而确保资源在对象生命周期内得到正确管理。...定义 RAII是一种C++编程的编程范式,它将资源的生命周期与对象的生命周期绑定在一起。...通过RAII,资源的获取和释放是自动进行的,从而避免了资源泄漏和内存泄漏等问题。 基本思想 RAII的基本思想:在对象的构造函数获取资源,并在析构函数释放资源。...C++标准库的许多类都使用了RAII思想来管理资源,其中包括智能指针、文件流、互斥锁等。

    12010

    缓冲区刷新在 C++ 中意味着什么?

    因此,当我们保存我们的工作时,自上次保存以来我们对文档所做的更改将从缓冲区刷新到硬盘上的永久存储。 在 C++ ,我们可以显式刷新以强制写入缓冲区。...通常,std::endl函数通过插入换行符并刷新流来工作。stdout/cout 是行缓冲的,即在您编写换行符或显式刷新缓冲区之前,输出不会发送到操作系统。...std::cout << a << " + " << b << " = " << <em>std</em>::endl; 但是有一定的缺点,比如,  // 下面是<em>C++</em>程序 #include #include... #include using namespace <em>std</em>; int main() { for (int i = 1; i <= 5; ++i) { cout...例如, // <em>C++</em>程序演示flush函数的使用 #include #include #include using namespace <em>std</em>;

    56010

    4.3 C++ Boost 日期时间操作库

    Boost库已被广泛应用于许多不同领域的C++应用程序开发网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。...3.1 字符串日期时间互转 本节涉及的主要内容是如何使用Boost库的日期和时间模块来实现C字符串与日期时间的相互转换,其中包括字符串读取日期时间,将日期时间转换为字符串,常用日期时间格式和常见处理问题及其解决方案...在本节,我们首先介绍了boost库中常见的日期格式化输出控制字符,例如%Y、%m等,然后通过举例和代码示范的方式,演示了如何在日期对象中使用这些格式化字符,并将日期转为对应的字符串格式。...::system("pause"); return 0; } 3.10 时间基本操作 本节主要介绍了boost库的一些时间基本操作,包括获取当前时间,计算时间差值,以及比较时间大小等等。...在本节,我们首先介绍了如何获取当前时间,包括获取时间点类型、日期类型、以及时间类型等等;然后,我们介绍了如何计算时间差值,包括使用时间持续类型、时钟类型等等;最后,我们介绍了如何比较时间大小,包括比较时间点和日期等等

    37950

    并发编程(C++11到C++17)

    在面向进程设计的系统(早期的UNIX,Linux 2.4及更早的版本),进程是程序的基本执行实体; 线程(英语:thread)是操作系统能够进行运算调度的最小单位。...具体编译器对于C++特性支持的情况请参见这里:C++ compiler support。 安装好之后运行根目录下的下面这个命令即可: 它会完成所有的编译工作。...在这个模型下: •生产者和消费者共享一个工作区。这个区间的大小是有限的。•生产者总是产生数据放入工作,当工作区满了。它就停下来等消费者消费一部分数据,然后继续工作。...•消费者总是工作拿出数据使用。当工作的数据全部被消费空了之后,它也会停下来等待生产者往工作区中放入新的数据。...如果多个线程调用get()会出现数据竞争,其结果是未定义的。 如果真的需要在多个线程获取future的结果,可以使用shared_future。 并行算法 C++17开始。

    814130

    C++并发编程(C++11到C++17)

    在面向进程设计的系统(早期的UNIX,Linux 2.4及更早的版本),进程是程序的基本执行实体; 线程(英语:thread)是操作系统能够进行运算调度的最小单位。...具体编译器对于C++特性支持的情况请参见这里:C++ compiler support。 安装好之后运行根目录下的下面这个命令即可: ./make_all.sh 它会完成所有的编译工作。...在这个模型下: 生产者和消费者共享一个工作区。这个区间的大小是有限的。 生产者总是产生数据放入工作,当工作区满了。它就停下来等消费者消费一部分数据,然后继续工作。...消费者总是工作拿出数据使用。当工作的数据全部被消费空了之后,它也会停下来等待生产者往工作区中放入新的数据。...如果多个线程调用get()会出现数据竞争,其结果是未定义的。 如果真的需要在多个线程获取future的结果,可以使用shared_future。 并行算法 C++17开始。

    1.4K40
    领券