# ccal **Repository Path**: tinytaro/ccal ## Basic Information - **Project Name**: ccal - **Description**: 公历与农历转换工具 - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-20 - **Last Updated**: 2026-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ccal - 公历与农历转换工具 ## 版权信息 Copyright (c) 2000-2012, by Zhuo Meng (zxm8@case.edu). 保留所有权利。 ## 许可证 根据 GNU General Public License(GPL)版本 2 或更高版本分发。 与农历计算相关的部分根据 GNU Lesser General Public License(LGPL)版本 2 或更高版本分发。 ## 概述 ccal 工具用于输出公历和农历的日历。其用法类似于 Unix 平台上常见的 cal 程序。除 ASCII 输出外,它还可以生成: - 封装 PostScript (EPS) - HTML 表格 - XML 这些输出可用于制作自制日历和网页。支持简体中文和繁体中文。 ## 在线版本 该工具的最新版本及其 Web 界面提供更多功能,包括使用您选择的图片自动创建自定义日历,可在以下网站找到: http://ccal.chinesebay.com/ccal/index.html ## 功能特性 - **公历与农历转换**:精确计算公历日期对应的农历日期 - **多种输出格式**:支持 ASCII、EPS、HTML、XML 格式 - **节气计算**:显示二十四节气 - **月相显示**:显示月相信息 - **汉字支持**:支持简体中文和繁体中文 - **命令行工具**:提供便捷的命令行接口 - **C/C++ 库**:可嵌入到其他程序中使用 ## 编译和安装 ### 使用 CMake(推荐) ```bash # 配置构建 cmake -B build -DCMAKE_BUILD_TYPE=Release # 编译 cmake --build build # 安装(需要 sudo 权限) sudo cmake --install build ``` ### 使用 Make(传统方式) ```bash # 编译 make # 安装程序和手册页到 /usr/local/bin 和 /usr/local/man make install make install-man ``` **注意**:建议使用 GNU make 和较新的 g++ 编译器来编译程序。对于其他编译器或 make 版本,可能需要自定义 Makefile。 ### 手动编译 如果 make 命令无法使用 Makefile,您仍然可以手动编译,只要您的 C++ 编译器支持标准模板库(STL): ```bash # 进入源代码目录 cd src # 编译 CC -O -DUSE_YEARCACHE -o ccal *.cpp ``` 将 CC 替换为适当的 C++ 编译器命令。如果编译器不能正确处理命名空间,需要添加 `-DNO_NAMESPACE` 选项。 ## 命令行使用 ### 基本用法 ```bash # 显示当前月份的日历 ccal # 显示指定年份的日历 ccal 2024 # 显示指定年份和月份的日历 ccal 2024 2 # 显示繁体中文 ccal -t # 输出为 PostScript 格式 ccal -p 2024 2 > calendar.ps # 输出为 HTML 格式 ccal -H 2024 2 > calendar.html ``` ### 选项说明 使用 `man ccal` 查看完整的选项说明和用法示例。 ## 库使用 ccal 还提供 C/C++ 库,可用于在您的程序中集成公历与农历转换功能。 详细的库使用指南请参见 [examples/README.md](examples/README.md)。 ### 基本示例 ```c #include #include "ccal.h" int main(void) { int result = ccal_init(); if (result != CCAL_SUCCESS) { printf("初始化失败\n"); return 1; } ccal_date_t solar; ccal_lunar_t lunar; solar.year = 2024; solar.month = 2; solar.day = 10; result = ccal_solar_to_lunar(&solar, &lunar); if (result == CCAL_SUCCESS) { printf("农历 %04d年%02d月%02d日%s\n", lunar.year, lunar.month, lunar.day, lunar.is_leap ? " (闰月)" : ""); } ccal_cleanup(); return 0; } ``` ## 项目结构 ``` . ├── README.md # 项目说明文档 ├── CMakeLists.txt # CMake 构建配置 ├── ccal.cpp # 主程序源代码 ├── include/ccal.h # 库头文件 ├── ccallib.cpp # 库实现 ├── lunaryear.cpp # 农历年份计算 ├── moonphase.cpp # 月相计算 ├── solarterm.cpp # 节气计算 ├── psmonth.cpp # PostScript 输出 ├── htmlmonth.cpp # HTML 输出 ├── examples/ # 示例代码 └── openspec/ # OpenSpec 规范文档 ``` ## 支持平台 - Linux - Unix - macOS - Windows(需自行配置编译环境) ## 贡献 欢迎提交问题报告和拉取请求。 ## 许可证详情 - 主程序:GNU General Public License v2.0 - 农历计算部分:GNU Lesser General Public License v2.0 详细信息请参见 [COPYING](COPYING) 和 [COPYING.LESSER](COPYING.LESSER) 文件。