0

看起来这个特定的函数阻塞了谷歌提供的字符串。例如:

Saturday, 2 December 2017 at 15:00:32 UTC

似乎没有解析,至少使用带有此功能的basex控制台:

> 
> xquery fn:parse-ietf-date("Wed, 6 Jun 94 07:29:35 GMT") 
1994-06-06T07:29:35Z
Query executed in 0.82 ms.
> 
> xquery fn:parse-ietf-date("Sat, 2 December 2017 15:00:32 UTC") 
Stopped at ., 1/19:
[FORG0010] Invalid input ('-' expected, 'e' found): 'Sat, 2 December 2017 15:00:32 UTC'.
> xquery fn:parse-ietf-date("Sat, 2 Dec 2017 15:00:32 UTC") 
2017-12-02T15:00:32Z
Query executed in 3.45 ms.
> 
> xquery fn:parse-ietf-date("Sat, 2 Dec 2017 at 15:00:32 UTC") 
Stopped at ., 1/19:
[FORG0010] Invalid input (time expected, 'a' found): 'Sat, 2 Dec 2017 at 15:00:32 UTC'.
> 
> xquery fn:parse-ietf-date("Sat, 2 December 2017 15:00:32 UTC") 
Stopped at ., 1/19:
[FORG0010] Invalid input ('-' expected, 'e' found): 'Sat, 2 December 2017 15:00:32 UTC'.
> 

看起来“at”会造成严重破坏,就像一个完整的月份与一个简短的月份一样。

这个函数能解析这个日期吗?如果不是,什么替代功能可能是合适的?

据推测,谷歌使用标准时间戳。

(数据来自导出为 JSON 的“google hangouts”。)

4

1 回答 1

1

当您查看语法时,fn:parse-ietf-date()您会注意到不仅 at 还写出的月份正在使解析器关闭;你可以使用fn:replace()这样的正则表达式来解决这个问题:

parse-ietf-date(
  replace('Saturday, 2 December 2017 at 15:00:32 UTC', 
        '(\w+, \d+ [A-z]\w\w)\w+ (\d{4}) at',
        '$1 $2'
  )
)

演示

于 2020-12-17T20:56:16.973 回答