带时区的日期时间格式

时间:2016-01-23 12:43:44

标签: mysql datetime timezone

我将API作为字符串以此格式提取日期:yyyy-MM-dd'T'HH:mm:ss'Z'

问题是当我尝试保存它时,让我们说今天2015-01-23T13:42:00Z标记ZT未显示在MySQL数据库中(日期保存为{{1} }})。

我想保留字段日期类型,即我不想将日期保存到2015-01-23 13:42:00字段。

我不熟悉日期时区格式,欢迎任何建议。

1 个答案:

答案 0 :(得分:10)

首先,请阅读DATETIMETIMESTAMP类型in the mysql docs

然后,决定使用哪种字段类型:

  • 如果您想要提交,存储和检索相同的值而不让MySQL执行时区转换,请使用DATETIME字段。

  • 如果您想使用特定时区向/从字段提交和检索值,但实际存储UTC时间,请使用TIMESTAMP

    • 考虑您可能仍希望将TIMESTAMP类型用于基于UTC的值,但只需将会话时区明确设置为UTC。
  • 永远永远VARCHAR字段中存储日期/时间值。

最后,要意识到数据库中实际存储与您检查数据时之间存在巨大差异。数据库以非可见的二进制表示形式有效地存储事物。您只需观察在显示期间投射到特定格式的值。提交数据时使用的格式有助于制作二进制值,但随后会丢弃这些字符串。稍后当您查看该字段时,如果您将它们打印到屏幕上,那么它会转换回字符串,以便它可以显示该值。

如果您发送了一个整数作为" 1,234"它没有什么不同。 - 它实际上并不存储该字符串,它存储0x04D2(或0000 0100 1101 0010二进制)。你可以读回来作为" 1234"或" 1,234"将逗号放在正确位置的格式与存储值的方式无关。它只与显示值的工具如何呈现输出有关。您的日期格式设置方案也是如此。