Magnolia CMS DateFieldDefinition 与夏令时更改有关的问题

2024-02-16

使用时Magnolia CMS 的 DateFieldDefinition 类 https://documentation.magnolia-cms.com/display/DOCS/Date+field:如果我的计算机的当前日期与保存日期的夏令时不匹配,则保存日期的时间将不正确。

相关类:info.magnolia.ui.form.field.definition.DateFieldDefinition https://javadoc.magnolia-cms.com/info.magnolia.ui.form.field.definition.DateFieldDefinition.

相关的Vaadin 组件“使用 DateField 输入日期和时间” https://vaadin.com/docs/-/part/framework/components/components-datefield.html.

另一个人似乎也有同样的问题 https://documentation.magnolia-cms.com/display/DOCS/Date+field?focusedCommentId=125189517#comment-125189517.

EDIT: Magnolia CMS 似乎已经有关于此问题的票证 https://jira.magnolia-cms.com/browse/MGNLUI-4014


Example:

在这个例子中,我在本地运行 Magnolia CMS.

  1. 我的计算机的当前日期是2016 年 10 月 17 日

  2. 我的计算机的时区是“瑞士/苏黎世”;因此我在

  3. 在 Magnolia 管理面板中,我保存了日期2016 年 11 月 3 日,

这就是它变得有趣的地方:

  1. 我将计算机的日期更改为2016年11月2日,

  2. 在 Magnolia 管理面板中,我打开该日期,显示少一小时.


插图


由于以下几个问题,Magnolia 5 中的日期/时间实现曾经(并且可能仍然)相当糟糕:

  • 它无法区分时间点(例如,与可能在另一个时区的某人进行 Skype 约会)和“概念”时间(例如,何时做早餐的注释 - 无论哪个时区,早餐总是在 7:00,因此这不是关于某个特定时间点,而是关于7点钟的概念)
  • 它将日期保存为时间戳,尽管日期既不是时间戳也不是时间跨度。这种不准确会导致下一个问题:
  • 由于 Magnolia 5 将日期视为时间戳,而 Magnolia 5 始终将时间戳视为“时间点”,因此 Magnolia 5 也将日期视为时间点,尽管这总是错误的。日期始终只是“概念”(在上述意义上),例如出生日期。如果我出生于 1980 年 1 月 1 日,那么这就是我的出生日期,每个时区都是如此。我的出生日期不是另一个时区的 1979 年 12 月 31 日,就像前面提到的“时间点”语义一样。
  • 日期和时间在 JCR 中保存为 Calendar 的实例,即带有时区的时间戳。将数据从一个 Magnolia 实例传输到另一个实例(导出、导入、激活)时,实际时间戳会按原样复制,不会转换为目标系统的时区。这意味着当目标系统最终读取这些值时,它可能会看到错误的日期和/或时间,除非它显式转换了这些值。
  • Magnolia 过去使用浏览器时区通过 Vaadin 日期/时间字段从用户读取日期/时间,但使用服务器时区将它们存储在 JCR 中。这意味着业务逻辑中始终存在可能需要也可能不需要的隐式转换。在许多情况下,错误的值最终会出现在存储库中(例如,当输入出生日期时),因此基于它们的后续处理有一定的出错概率。无论如何,必须预料到存储库中保存的日期/时间不是用户输入的日期/时间。

在我写给 Magnolia 的关于这些问题的支持票中,他们表示已在 Magnolia CORE 5.4.11 中修复了该问题,该版本将从 5.5.1 起提供。我还没有测试这些修复,但是除非您使用这个修复版本,否则我不建议您期待一个简单的解决方案来解决您的问题,这是我上面提到的问题之上的。我这样做只是为了记录提供的类为您的用例获得正确行为的空间是多么小,除非您完全需要他们已经实现的用例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Magnolia CMS DateFieldDefinition 与夏令时更改有关的问题 的相关文章

随机推荐