Datetime 时间/日期范围语法

Datetime 时间/日期范围语法,datetime,parsing,grammar,timespan,Datetime,Parsing,Grammar,Timespan,我需要分析包含时间跨度的字符串,例如: 星期四上午6:30-7:30 2009年12月30日至2010年1月1日 2009年1月15日,晚上7:30至8:30 星期四,上午6:30至7:30 和其他人 增加 6:30至7:30 和日期/时间,例如Word的insert->date可以生成的大多数情况 如果有任何东西涵盖了我需要涵盖的所有案例,我会非常惊讶,我正在寻找语法作为起点。好的,下面的语法解析了您示例中的任何内容: DTExp = Day, ['-', Day] Da

我需要分析包含时间跨度的字符串,例如:

  • 星期四上午6:30-7:30
  • 2009年12月30日至2010年1月1日
  • 2009年1月15日,晚上7:30至8:30
  • 星期四,上午6:30至7:30
  • 和其他人
增加

  • 6:30至7:30
和日期/时间,例如Word的insert->date可以生成的大多数情况


如果有任何东西涵盖了我需要涵盖的所有案例,我会非常惊讶,我正在寻找语法作为起点。

好的,下面的语法解析了您示例中的任何内容:

DTExp        = Day, ['-', Day]
Day          = DayExp, [[','], ['from'], TimeRange]
DayExp       = WeekDay
             | [Weekday], Month, DayNumber, [[','], YearNumber]
             | [Weekday], MonthNumber, '/', DayNumber, ['/', YearNumber]
TimeRange    = Time, [['-'|'to'] Time]
Time         = HourNumber, ':', MinuteNumber, ['AM'|'PM']
WeekDay      = 'monday' | 'tuesday' | ...
Month        = MonthNumber | MonthName
MonthName    = 'january' | 'february' | ...
DayNumber    = Number
MonthNumber  = Number
YearNumber   = Number, ['AD'|'BC']
HourNumber   = Number
MinuteNumber = Number
语法上有个小问题。如果读取一个DayExp,后跟一个时间和一个“-”,那么您可以期待另一个DayExp或另一个时间。但这可以通过向前看来解决,因为如果是时间,数字后面会跟一个“:”

让我们尝试构造一个解析树:

Thursday  6    :  30     -   7    :   30    AM
    |     |        |         |         |     |
WeekDay Number : Number  - Number : Number   |
    |     -----|----         -----|----------- 
    |         Time       -       Time
    |           ---------|---------
 DayExp              TimeRange
    ----------|-----------
             Day
              |
            DTExp

你是刚生成的还是来自其他来源(链接?)。只是好奇。不,是我创造的。我几乎梦见语法;-)@游戏猫-你需要一个爱好普洛,我已经够了。但我可以在孩子们睡着的时候这样做(至少假装睡着)。其他人太吵了。“1/2/09从6:30到7:30-3/16/10”每个语法都有它的疯狂之处。