Как использовать функцию 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'
  )
)

Демо

Другие вопросы по тегам