如何使用Xquery函数fn:用谷歌时间戳解析ietf日期



看起来这个特定的函数阻塞了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'
)
)

演示

最新更新