MySQL ISO 8601日期,时区偏移量代替Z值

MySQL ISO 8601日期,时区偏移量代替Z值,mysql,datetime,timezone,offset,iso8601,Mysql,Datetime,Timezone,Offset,Iso8601,我需要选择ISO 8601日期 DATE_FORMAT(date, '%Y-%m-%dT%TZ') 这会产生类似于 2013-11-13T15:47:530Z 但我需要偏移量,而不是Z值: 2013-11-13T15:47:53+02:00 如何使用普通MySQL实现这一点?您需要将时区存储为DB中的一个额外列。我不知道有哪个数据库存储带有时区/偏移量的datetime 或者将日期存储为ISO 8601格式的字符串,并带有偏移量 编辑:我站在某种程度上得到了纠正,使用一些较新的数据库是可

我需要选择ISO 8601日期

DATE_FORMAT(date, '%Y-%m-%dT%TZ') 
这会产生类似于

2013-11-13T15:47:530Z
但我需要偏移量,而不是Z值:

2013-11-13T15:47:53+02:00

如何使用普通MySQL实现这一点?

您需要将时区存储为DB中的一个额外列。我不知道有哪个数据库存储带有时区/偏移量的datetime

或者将日期存储为ISO 8601格式的字符串,并带有偏移量

编辑:我站在某种程度上得到了纠正,使用一些较新的数据库是可能的

  • ,这确实可能包括时区。
    • 数据类型:“带时区的时间戳[(p)]”仅用于输入和输出,它存储在UTC中
    • 数据类型:“带时区的时间”,仅时间,存储时区偏移量自第8版起。
    • 数据类型:“带时区的时间戳”,存储时区偏移量自版本9i起。
    • 数据类型:“带时区的时间戳”,存储时区偏移量或时区名称自10g版起。
    • 另见
    • 数据类型:“datetimeoffset”,存储时区偏移
    • 数据类型:“带时区的时间戳”,存储时区偏移量
    • SQL/2008标准的可选SQL语言功能F411支持带时区的时间戳
  • 实际上似乎有点标准

  • 不适合。版本5.6

  • 对我来说也不是。版本3

我确实从我自己的更正中得到安慰;-)

您需要将时区存储为DB中的额外列。我不知道有哪个数据库存储带有时区/偏移量的datetime

或者将日期存储为ISO 8601格式的字符串,并带有偏移量

编辑:我站在某种程度上得到了纠正,使用一些较新的数据库是可能的

  • ,这确实可能包括时区。
    • 数据类型:“带时区的时间戳[(p)]”仅用于输入和输出,它存储在UTC中
    • 数据类型:“带时区的时间”,仅时间,存储时区偏移量自第8版起。
    • 数据类型:“带时区的时间戳”,存储时区偏移量自版本9i起。
    • 数据类型:“带时区的时间戳”,存储时区偏移量或时区名称自10g版起。
    • 另见
    • 数据类型:“datetimeoffset”,存储时区偏移
    • 数据类型:“带时区的时间戳”,存储时区偏移量
    • SQL/2008标准的可选SQL语言功能F411支持带时区的时间戳
  • 实际上似乎有点标准

  • 不适合。版本5.6

  • 对我来说也不是。版本3

我确实从我自己的更正中得到安慰;-)

如果没有milis,他的代码片段应该适用于iso 8601,祖鲁时间也不受支持:

select IF(
LENGTH(value) < 23,
STR_TO_DATE(value,'%Y-%m-%dT%TZ'),
CASE SUBSTRING(value from 20 for 1)
WHEN '+' THEN
DATE_ADD(
STR_TO_DATE(SUBSTRING(value from 1 for 19),'%Y-%m-%dT%TZ'),
INTERVAL SUBSTRING(value from 21 for 2) HOUR)
WHEN '-' THEN
DATE_SUB(
STR_TO_DATE(SUBSTRING(value from 1 for 19),'%Y-%m-%dT%TZ'),
INTERVAL SUBSTRING(value from 21 for 2) HOUR
)
END
)
from THE_NAMESPACE.THE_TABLE.THE_COLUMN as value;
选择“如果”(
长度(值)<23,
截止日期(值,'%Y-%m-%dT%TZ'),
案例子字符串(值从20到1)
那么当“+”时
添加日期(
STR_TO_DATE(子字符串(值从1到19),“%Y-%m-%dT%TZ”),
间隔子字符串(值从21开始,持续2小时)
那么什么时候
日期分组(
STR_TO_DATE(子字符串(值从1到19),“%Y-%m-%dT%TZ”),
间隔子字符串(值从21到2)小时
)
结束
)
从_NAMESPACE.THE_TABLE.THE_列作为值;

如果没有MILS,他的代码片段应该适用于iso 8601,祖鲁时间也不受支持:

select IF(
LENGTH(value) < 23,
STR_TO_DATE(value,'%Y-%m-%dT%TZ'),
CASE SUBSTRING(value from 20 for 1)
WHEN '+' THEN
DATE_ADD(
STR_TO_DATE(SUBSTRING(value from 1 for 19),'%Y-%m-%dT%TZ'),
INTERVAL SUBSTRING(value from 21 for 2) HOUR)
WHEN '-' THEN
DATE_SUB(
STR_TO_DATE(SUBSTRING(value from 1 for 19),'%Y-%m-%dT%TZ'),
INTERVAL SUBSTRING(value from 21 for 2) HOUR
)
END
)
from THE_NAMESPACE.THE_TABLE.THE_COLUMN as value;
选择“如果”(
长度(值)<23,
截止日期(值,'%Y-%m-%dT%TZ'),
案例子字符串(值从20到1)
那么当“+”时
添加日期(
STR_TO_DATE(子字符串(值从1到19),“%Y-%m-%dT%TZ”),
间隔子字符串(值从21开始,持续2小时)
那么什么时候
日期分组(
STR_TO_DATE(子字符串(值从1到19),“%Y-%m-%dT%TZ”),
间隔子字符串(值从21到2)小时
)
结束
)
从_NAMESPACE.THE_TABLE.THE_列作为值;

您如何知道要指定哪个偏移量?您的意思是时区不会保存在mysql datetime对象中?我想要日期时间的偏移量…据我所知不是。。。(请注意,偏移量实际上也不同于时区。)在日光保存期间,我的日期时间以GMT+1或GMT+2表示。我有带有日期时间的订单,我需要将其导出到客户,并使用偏移量,例如+02:00。您是否真正关心即时?如果是这样,我建议将所有内容都存储在UTC中,最好将数据库的时区设置为UTC,以便更好地测量。然后在数据库之外进行任何其他处理。您如何知道要指定哪个偏移量?您的意思是时区不会保存在mysql datetime对象中?我想要日期时间的偏移量…据我所知不是。。。(请注意,偏移量实际上也不同于时区。)在日光保存期间,我的日期时间以GMT+1或GMT+2表示。我有带有日期时间的订单,我需要将其导出到客户,并使用偏移量,例如+02:00。您是否真正关心即时?如果是这样,我建议将所有内容都存储在UTC中,最好将数据库的时区设置为UTC,以便更好地测量。然后在数据库之外执行任何其他处理。