【问题标题】:UTC offset for provided region in MarkLogicMarkLogic 中提供的区域的 UTC 偏移量
【发布时间】:2018-12-19 13:30:41
【问题描述】:

有没有办法在 MarkLogic 中本地获取给定区域的 UTC 偏移量?

例如如果区域为“America/New_York”,则偏移量应为 -5:00(标准时间期间)或 -4:00(夏令时期间)

如果使用内置 ML 函数无法实现这一点,您会推荐什么? 我想在 MarkLogic 环境中自己做。

【问题讨论】:

    标签: marklogic marklogic-8 marklogic-9


    【解决方案1】:

    MarkLogic 从操作系统读取时区设置,因此请更改主机本身的时区设置。

    这里有一些关于如何为 CentOS/RedHat 执行此操作的说明,基本上归结为将 /etc/localtime 链接到不同的预定义时区文件之一:

    https://ma.ttias.be/changing-the-time-and-timezone-settings-on-centos-or-rhel/

    HTH!

    【讨论】:

    • 这不是我想要的。我想在 ML 中创建一个 XQuery 模块,它将返回给定区域名称的 UTC 偏移量。我找不到任何能够做到这一点的内置 ML 函数。
    • 啊,看来我误解了这个问题。 parse-dateTime 似乎涵盖了其中的一部分,但不是全部。这有效:xdmp:parse-dateTime("[Zn]", "Amsterdam"),但xdmp:parse-dateTime("[Zn]", "New_York") 无效。不过,它确实可以理解大多数首字母缩略词,因此如果您可以将地区转换为时区代码,您就可以非常接近。否则,您可能需要在 map:map 等中对表格进行硬编码。
    【解决方案2】:

    这个问题本身是无法回答的。时区偏移量因年份以及地区和地方而异(由于时区的性质 h - 一种政治结构,而不是任何理智的东西)。
    随着决定此类事情的区域组织决定规则,规则会随着时间而变化,并且在任何合理的方式上都不一致。
    规则和表格内置在每个操作系统中——以不同的方式和完整性/准确性,取决于操作系统、本地区域和软件包安装/更新。通常,它们不会及时回溯,并且可能仅包含本地区域的数据。

    这些表格主要用于回答“当前区域设置时间是多少”,其次是回答“特定区域名称的当前 TZ 偏移量是多少”。获得更多的时间是一个延伸(例如“DST 何时发生”、“在 XYZ 区域观察到 DST”、历史分区时间的本地时间或 TZ 偏移量是多少)

    结果,“什么是 UTC 偏移量”的答案不是单个数字常量。

    我建议您具体确定问题的意图/用例,然后创建适当的表格并将其作为文档导入 ML。 比如这个:

    https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

    根据实际预期用例进行调整,因为脱离上下文的问题不太可能有一个对所有目的都正确的答案。

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 2014-01-09
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 2018-03-01
      • 2017-10-18
      • 2011-12-25
      • 1970-01-01
      相关资源
      最近更新 更多