Как использовать функцию Xquery fn:parse-ietf-date с отметкой времени Google?
Похоже, что эта функция подавляет строку, которую предоставляет 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'.
>
Похоже, что «at» вызывает хаос, как и полный месяц по сравнению с просто сокращенным месяцем.
эта функция может анализировать эту дату? Если нет, то какая альтернативная функция может подойти?
Предположительно Google использует стандартную временную метку.
(данные конкретнаяполучены из видеовстреч Google Hangouts, экспортированных в формате JSON.)
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'
)
)