【发布时间】:2015-10-05 13:37:50
【问题描述】:
给了我一堆告诉我一个事件的字符串,我需要将所有字符串转换为开始 DateTime 和结束 DateTime。起初,我尝试逐个字符地遍历字符串,但是当字符串中有多个日期时,它变得太复杂了。我也尝试解析许多日期格式,但是当日期和月份首先出现时,然后是时间,它不起作用。我正在使用 C#,并且还尝试使用 Regex 搜索字符串,但我遇到了麻烦,因为我无法将日期与正确的时间匹配。
下面是我给出的几个字符串示例:
2015 年 9 月 12 日至 13 日,星期六上午 10:30 至下午 6 点。周日中午 10 点
应该有 2 个日期:
StartDate: 2015/09/12 10:30 EndDate: 2015/09/12 18:00
StartDate: 2015/09/13 10:00 EndDate: 2015/09/13 12:00
2015 年 6 月 3 日至 9 月 9 日,周二至周四下午 6 点至 7 点,周日上午 10 点到 11 点
星期二/星期四/星期日的多个日期,日期范围:
StartDate: 2015/06/04 18:00 EndDate: 2015/06/04 19:00
StartDate: 2015/06/07 10:00 EndDate: 2015/06/07 11:00
StartDate: 2015/06/09 18:00 EndDate: 2015/06/09 19:00
StartDate: 2015/06/11 18:00 EndDate: 2015/06/11 19:00
...继续遵循相同的模式
谢谢。
【问题讨论】:
-
似乎是一个令牌的工作......首先尝试将可能的格式概括为规则。
-
试试标准日期时间解析模块之一是否适合您。例如,Perl 有一些:search.cpan.org/~gbarr/TimeDate-2.30/lib/Date/Parse.pm 如果没有,另一种选择是设计一个具有可能日期格式的小型 DSL(领域特定语言),并使用 ANTLR 或 Flex/Bison 等解析器生成器来生成代码。
-
当日期格式如此多样时,可能的日期格式是什么?有些字符串以时间开头,以月份结尾,依此类推。
-
为什么第一个字符串
"Sunday 10 a.m. noon"的结束时间是12:00?