对于我的应用程序,我需要一个可以处理日期直接描述的解析器,例如“12/31/10”为今年的新年前夜,但也可以处理/重复/日期的描述,例如“每个月的第一个星期一。” boost :: date_time已经有了日期生成器的概念,但我不认为它提供了将字符串转换为它们的任何通用方法,而不知道将生成的生成器的类型。
在我去重新发明轮子之前,那里有没有东西可以做到这一点?我对字符串的确切语言很灵活,只要这是非程序员可以阅读和理解的东西。
答案 0 :(得分:2)
你可以使用精彩的boost :: spirit库。
它允许您轻松地为此类事物创建解析器。
答案 1 :(得分:1)
也许你可以从Roaring Penguin's remind
tool中汲取灵感,这种灵感有一个相当容易理解的(对于简单的情况)语言。
答案 2 :(得分:0)
您可以在EBNF中编写自己的语法,然后使用词法分析器/解析器生成器为您创建代码框架。
答案 3 :(得分:0)
使用this library,这里的代码打印出2011年每个月的第一个星期一:
#include "date.h"
#include <iostream>
int main()
{
using namespace gregorian;
std::cout << date_fmt("%A %B %e, %Y");
for (date d = first*mon/jan/2011; d <= dec/31/2011; d += month(1))
std::cout << d << '\n';
}
输出:
Monday January 3, 2011
Monday February 7, 2011
Monday March 7, 2011
Monday April 4, 2011
Monday May 2, 2011
Monday June 6, 2011
Monday July 4, 2011
Monday August 1, 2011
Monday September 5, 2011
Monday October 3, 2011
Monday November 7, 2011
Monday December 5, 2011
您还可以获得第二个,第三个等,或一个月的最后一个工作日。算术可以是日,月或年。