如何将像“今天”和“昨天”这样的相对日期转换为XQuery日期对象?

5

XQuery有一组用于日期转换的实用函数。但是如何将类似“今天”和“昨天”的相对日期转换为实际日期呢?

例如,“今天,17:33”应转换为“2012-05-30”,“昨天,22:13”应转换为“2012-05-29”。

1个回答

9

1. 解析日期字符串

解析日期字符串。我提供了一个小函数,它可以分离表示日期的单词并进行解析。我添加了一些更方便的日期名称,但如果需要,您可以很容易地添加更多,注意我会将其转换为小写!它使用XQuery日期和时间函数来计算匹配的日期。

declare function local:from-relative-date($string as xs:string) as xs:date {
    switch (lower-case(substring-before($string, ",")))
        case "today"                return current-date()
        case "yesterday"            return current-date() - xs:dayTimeDuration('P1D')
        case "day before yesterday" return current-date() - 2 * xs:dayTimeDuration('P1D')       
        case "tomorrow"             return current-date() + xs:dayTimeDuration('P1D')       
        case "day after tomorrow"   return current-date() + 2 * xs:dayTimeDuration('P1D')       
        default                     return error(xs:QName("XPTY0004"), "Unknown Date")
};

2. 格式化日期

现在使用 XQuery 3.0 函数format-date(...) (希望您的 XQuery 引擎支持它,我为此示例使用的 BaseX 就支持)来按照需要的格式对日期字符串进行格式化:

format-date(local:from-relative-date("Yesterday, 22:13"), "[Y]-[M00]-[D00]")

如果不行的话,你需要使用year-from-date(...)函数以及对应的月份日期函数,进行数字格式化并自行连接。

+1,这就是我们需要的东西。我们真的需要说服我工作的地方更新我们的现有系统! - matchew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接