假设我需要获取订单,并且需要保存用户下订单的时间戳。此外,我需要一种方法来根据用户请求密码重置代码的时间来跟踪 token 何时设置为过期。我的服务器位于德克萨斯州,我如何为遍布美国的用户提供服务?我最不想做的就是问他们在哪个时区,所以我不确定如何处理 UTC 显示时间,这会让普通人感到困惑。
最佳答案
首先,您应该将显示 与存储 隔离。仅仅因为您以特定方式存储值并不意味着您必须以这种方式显示它。
其次,想想您实际捕获的是什么:它是一个时间戳。 “现在”的全局理念。时区在这里无关紧要 - 位于不同时区的两个通情达理的人会就谁先下订单达成一致,而不管他们所在的时区如何。
因此感觉以 UTC 格式存储时间戳是完全合理的。事实上,时间戳几乎总是最好存储在 UTC 中。只有当您询问用户对日期/时间的想法时,本地时间有时才有意义。
至于如何显示用户本地时间的值 - 这很棘手:
- 你可以根据他们的送货地址等来猜测
- 你可以根据他们的 IP 地址来猜(可能会有一些有趣的问题)
- 您可以猜一次并将其存储在首选项中,因此他们可以在必要时修复它
- 您可以使用 Javascript 实现,提供 UTC 值,然后在客户端将其转换为本地时间
(当然,在猜测时区时,您始终可以在 Javascript 中使用 UTC 到本地的转换来帮助使猜测准确。)
关于mysql - 我应该在 MySQL 中将我的时间戳保存为 UTC 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180810/