如何使用时区存储时间戳

时间:2018-11-07 09:20:18

标签: oracle symfony

我正在尝试将带有时区的时间戳存储到我的oracle数据库中。

例如,我有以下代码:

$deadline = new \DateTime('2018-11-07 13:33', new \DateTimeZone("EUROPE/BERLIN"));
$control->setDeadline($deadline);

,存储在我的oracle数据库中的结果就是这个: 07.11.18 13:33:00.000000000 +01:00

但是我的目标是使用以下格式存储时间戳: 07.11.18 13:33:00.000000000 EUROPE / BERLIN

如果我运行此查询,则值将正确保存为所需格式:

update my_table
set deadline = TIMESTAMP '2018-11-07 09:00:00 EUROPE/BERLIN'

我做错了什么?正确格式化时间戳以使用symfony获得所需结果的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

就像synfony将global.mylog = function(prefix, message) { debug ? (console.log(new Date().toString() + '\t' + prefix + '\t\t' + ((typeof message === 'string') ? message : util.inspect(message)) )) : null }; // Logging helper function var log = function(message) { mylog(__filename.slice(__dirname.length + 1), message); }; 转换为Europe/Berlin一样-可能是一个错误。

作为解决方法,您可以执行以下操作:

+01:00

,然后插入没有任何时区的值,即

ALTER SESSION SET TIME_ZONE = 'Europe/Berlin';

如果您在$deadline = new \DateTime('2018-11-07 13:33'); $control->setDeadline($deadline); 列中插入时间戳,并且不提供任何时区信息,那么Oracle会将时区默认为您之前设置的当前TIMESTAMP WITH TIME ZONE

您也可以通过环境变量SESSIONTIMEZONE或在注册表中SESSIONTIMEZONE来设置ORA_SDTZHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_{ORACLE_HOME Name}\ORA_SDTZ