# Perfect Time+Date **Repository Path**: ProAyeR/perfect-time-and-date ## Basic Information - **Project Name**: Perfect Time+Date - **Description**: 几乎完美的时间类。基于C++11 std::chrono、ctime等开发 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-07-17 - **Last Updated**: 2023-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: Cpp ## README # Perfect Time+Date #### 介绍 几乎完美的时间类。基于C++11 std::chrono、ctime等开发 #### 软件架构 软件架构说明 通过类来封装一些方便使用与操作的操作符与函数来达到方便操作与输出的功能 同时包含了各种事件获取方法的优点, 整合为一整个类 (详见examples下代码_NormalWayToGetTime.cpp) 由于使用了标准库的内容, 所以该库的系统兼容性很好, 适用于Windows以及各种Unix系统 #### 功能速览 ##### 时间类 时间将使用int数据类型来存储 小时、分钟、秒钟, 既可以表示一天中的时间, 也可以表示经过了多少时间 包含输出所用的格式控制参数 ```cpp string separator; // 用于指定输出格式时的分隔符(允许一长串) string sub_separator; // 用于指定秒与更小单位以及单位之间的输出分割符(允许一长串) FixedFormat fixed_format; // 用于指定输出格式, 是否固定长度 string fixer; // 用于指定输出格式时用于修正长度的字(只会获取第一个字符) ``` ##### 日期类 时间将使用int数据类型来存储 年份、月份、日数, 既可以表示日历上的时间, 也可以表示经过了多少日子 包含输出所用的格式控制参数 ```cpp string separator; // 用于指定输出格式时的分隔符(允许一长串) string sub_separator; // 用于指定秒与更小单位以及单位之间的输出分割符(允许一长串) FixedFormat fixed_format; // 用于指定输出格式, 是否固定长度 string fixer; // 用于指定输出格式时用于修正长度的字(只会获取第一个字符) ``` ##### 时钟类 _时钟类继承自事件类与日期类_ ##### 常数系列 程序添加自定义文本运算符, 使得如下代码得以能够实现 ```cpp Date a = Date(2022, 8, 31); a += 1_d; //1day cout << a; //输出 2022/9/1 ``` 支持的运算符有 _s, _sec == 秒 _min == 分钟 _h == 小时 _ms, _us, _ns == 分别是 毫秒, 微妙, 纳秒 _d == 天 _mth == 月 _y, _yr == 年 在文本运算符前面加上下划线的原因: 我在查资料的时候发现微软好像提出一个标准, 就是不允许标准库以外的库添加不以下划线开头的文本运算符 详见: https://docs.microsoft.com/zh-cn/cpp/cpp/user-defined-literals-cpp?view=msvc-170#user-defined-literal-operator-signatures #### 安装教程 1. 将项目下`Time&Date.cpp.cpp`与`Time&Date.cpp.hpp`下载到本地 2. 在您的项目中包含`Time&Date.cpp.hpp` 3. 使用命名空间`perfect_time_and_date` 4. 实例化一个时间、日期、时钟类, 即可使用该库十分方便的时间功能, 比如下面的代码 ```C++ #include "Time&Date.h" using namespace perfect_time_and_date; int main() { Clock time = now(); time.display(); return 0; } ``` #### 使用说明 具体的代码使用说明可以参考项目下examples文件夹内的例子 例子代码使用了作者认为的标准写法以及使用场景, 所有代码包含注释 可以帮助你快速入手该库 同时还推荐您使用重载的方法将类中的函数转化为C函数以支持C 当然, 这里指的是c当中可以使用的部分 另外, 在程序的源代码文件中, 我为每个函数以及类添加了使用说明, 如果你使用`Visual Studio Code`进行编辑 那么当你把鼠标悬浮在函数名上时, 将会看见每个函数的说明, 参数说明以及返回值说明 #### 注意事项 1. 编译注意 该库使用了大量c++11更新的内容, 所以对于某些编译器的版本, 需要在编译参数中加入 `-std=c++11` 参数 2. 用途 该库中的代码尚不成熟, 有许多性能低下需要优化的地方, 我在此没有做出优化, 在实际的使用中可能会导致性能问题 #### 意义党必知 该库的作用并不是要你直接拷贝下来自己使用,而是为了锻炼作者编写时间日期类的基础算法 当然,为了写好这个时间日期类,作者也是学习了很多的知识,做出了很多时间日期类的决定 为了实现其中某一些功能,应该需要怎样的代码 所以该库的作用最大就是,在你需要实现关于时间日期的某项功能时,可以来这里查看库中对应的实现,让你写出自己的时间日期类代码