Localization 在存储器中处理时区?

Localization 在存储器中处理时区?,localization,internationalization,timezone,globalization,Localization,Internationalization,Timezone,Globalization,把所有东西都存储在GMT中 以嵌入偏移量输入的方式存储所有内容 每次渲染时都进行数学运算吗 显示“1分钟前”的相对时间?就我个人而言,我看不出有任何理由不将所有内容存储在GMT中,然后使用用户本地时区显示与其相关的时间 如果你想显示相对时间,你显然仍然需要时间并进行翻译,但如果你确实想进行翻译,我认为GMT仍然是你最好的选择。我喜欢存储在GMT中,只显示相对时间(“大约10秒前”,“5个月前”)。对于大多数用例,用户不需要看到实际的时间戳 当然也有例外,而且单个应用程序可能有许多例外,因此它不可

把所有东西都存储在GMT中

以嵌入偏移量输入的方式存储所有内容

每次渲染时都进行数学运算吗


显示“1分钟前”的相对时间?

就我个人而言,我看不出有任何理由不将所有内容存储在GMT中,然后使用用户本地时区显示与其相关的时间


如果你想显示相对时间,你显然仍然需要时间并进行翻译,但如果你确实想进行翻译,我认为GMT仍然是你最好的选择。

我喜欢存储在GMT中,只显示相对时间(“大约10秒前”,“5个月前”)。对于大多数用例,用户不需要看到实际的时间戳

当然也有例外,而且单个应用程序可能有许多例外,因此它不可能是“一种真正的方式”的答案。需要强大审计能力(如投票)的事物,以及时间属于论述领域(天文学、科学研究)的系统可能要求向用户显示真实的时间戳


不过,大多数应用程序通过简单的相对时间更容易理解。

您必须存储在UTC中-如果您不这样做,您的历史报告和夏令时期间的行为将。。。有趣的格林尼治标准时间是一个当地时间,受夏令时相对于UTC的限制(UTC不是)

如果您存储的是本地时间,对不同时区的用户的演示可能会非常糟糕。如果您的原始数据是UTC格式的,则很容易调整到本地-只需添加您的用户偏移量,您就完成了

乔尔在其中一个播客中谈到了这一点(以一种迂回的方式)-他说(搜索“忠诚”),因为当它再次出现时,你总是可以咀嚼它。这就是为什么我说将其存储为UTC,作为本地时间,您需要为不在该时区的任何人进行调整,这是一项艰巨的工作。你需要存储,例如,当你存储时间时,夏令时是否有效。旭

过去我经常在数据库中存储两个UTC用于排序,本地时间用于显示。这样,用户和计算机都不会感到困惑


现在,关于显示:当然,你可以做“3分钟前”的事情,但只有当你存储UTC时——否则,在不同时区输入的数据会做类似于显示为“-4小时前”的事情,这会让人们感到害怕。如果你要显示一个实际时间,人们喜欢在他们的本地时间中显示它——如果数据输入在多个时区中,你只能在存储UTC时轻松地显示它。

所以我用MSSQL server做了一个小实验

我创建了一个表并添加了一行,其中包含当前本地化时区(澳大利亚)。 然后我将datetime改为GMT,并添加了另一行

即使这些行相隔10秒左右添加,它们在SQL server中也显示为相隔10小时


如果没有别的,它至少告诉我,我应该以一种新的方式存储日期,这对我来说,增加了将日期存储为GMT的参数的权重。

MS Dynamics存储GMT,然后在用户级别上知道相对于GMT的时区。然后,它向您显示时区中的项目


我只是想把它扔出去,因为微软有一个相当大的团队,他们就是这样决定的。

我通常只使用Unix时间。不一定是未来安全的,但它工作得很好。

始终存储在GMT(或UTC)中。从这里可以很容易地转换为任何本地时区值。

Josh在上面完全正确,但我有一个微妙的警告要解释。这是一个关于未来事件和时区没有正确答案的案例

考虑重复约会的情况。它发生在GMT 0000(为简单起见),即1200新西兰标准时间(新西兰标准时间)和1000澳大利亚悉尼AEST

当夏时制在一个区域生效时,约会会发生什么变化?如果它:

1a。如果TZ变化在 任命的“所有者”(谁 预订)然后尝试停留在 相同的办公桌时钟时间(如上午10:00)?
1b。如果 TZ的变化是在另一个 会议与会者的区域,则否 改变

后果:它会移动 其他人,出乎意料地,由于 主人改变了,但它保持不变 “上午10点的会议”到 业主很担心

"二,。如上所述,但相反

结果:它会为会议所有者移动(上午10点的会议变成上午9点的会议,或v/v),这可能是预期的,但不方便。在其他与会者完成他们自己的TZ过渡之前,它将保持在同一个办公桌时钟时间

两者都不完美。考虑两个约会的情况,一个是在当地时间上午10点发生的人预订的,另一个是被人B预订的,A是上午9点的一个参加者。如果人员A和人员B处于不同的TZ中,则DST变更可能很容易导致他们双重预订

如果你在这一点上有点心不在焉,那么我很理解

本示例背后的要点是,要正确执行这两种行为之一,您不仅需要知道当地时间的UTC版本,还需要知道所有者在预订时所处的TZ(而不是偏移量)。否则,你别无选择,只能默默地接受选项2,甚至不通知任何人自格林尼治标准时间以来情况发生了变化,只有演示文稿发生了变化……对吗?(不,这是陷阱,当上午10点的会议自行进行时,演讲很重要)

我必须相信我的同事和朋友杰森·波洛克的这一见解。阅读,然后在这里进行后续讨论。

答案总是“视情况而定”

这取决于您随时间描述的内容,以及数据是如何提供给您的。 决定如何存储时间值的关键是决定删除时区是否会丢失信息,同时不要让用户感到惊讶

这样做肯定有好处