XQuery:将日期时间与毫秒进行比较

Posted

技术标签:

【中文标题】XQuery:将日期时间与毫秒进行比较【英文标题】:XQuery: comparing datetimes with milliseconds 【发布时间】:2015-01-28 20:37:30 【问题描述】:

我在 Python 中有一个验证模块,它在 XML 文档上执行 XQuery,以检查是否有任何 <Start> 时间出现在 <End> 时间之后,并返回它们的计数。查询如下:

    for $d at $count in ./ty:Detections/Detection
        where $d/Start > $d/End
        return $count

现在这适用于所有情况,除非将毫秒附加到结束时间但不是开始时间,例如:

        <Start>2009-02-23T02:53:14Z</Start>
        <End>2009-02-23T02:53:14.226Z</End>

这总是返回 True,即使显然 14 小于 14.22。 如果我在这里为&lt;Start&gt; 时间添加一个小数位,它可以工作——但是有没有更好的解决方案?

【问题讨论】:

【参考方案1】:

推测StartEnd 元素没有有效的模式绑定。在这种情况下,查询正在执行 xs:untypedAtomic 比较,它有效地比较字符串值,其中"Z" 比较大于"."

您需要的是 xs:dateTime 比较,因此您应该在将元素值转换为该类型后比较它们。因此,查询应如下所示:

    for $d at $count in ./ty:Detections/Detection
    where xs:dateTime($d/Start) > xs:dateTime($d/End)
    return $count

【讨论】:

Gunther == 绅士 + 学者,先生,这就解决了!但是,我改成xs:dateTime大写T :) 谢谢。没错,xs:dateTime 中有一个大写的T ;-)

以上是关于XQuery:将日期时间与毫秒进行比较的主要内容,如果未能解决你的问题,请参考以下文章

对日期时间进行排序

在javascript中将iso日期转换为毫秒

将日期字符串与 SQL Server 中的日期时间进行比较?

我如何将当前日期与日期选择器中的用户输入日期进行比较

将日期和时间与今天的日期和时间进行比较

Joda Time 将时区日期时间转换为毫秒