看起来这个特定的函数阻塞了Google提供的字符串。例如:
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'.
>
它看起来像";在";造成严重破坏,一个完整的月与一个缩短的月一样。
这个函数能解析这个日期吗?如果没有,什么替代功能可能合适?
据推测,谷歌使用的是标准时间戳。
(数据来源于导出为JSON的"google hangouts"。(
当您查看fn:parse-ietf-date()
的语法时,您不仅会注意到at,而且会注意到写出的月份都会使解析器崩溃;您可以使用fn:replace()
和类似的regex来修复此问题:
parse-ietf-date(
replace('Saturday, 2 December 2017 at 15:00:32 UTC',
'(w+, d+ [A-z]ww)w+ (d{4}) at',
'$1 $2'
)
)
演示