Php 在oracle上更正日期时间
我在坚持原则,我所有的约会都取消了。当它们应该是-6(美国/芝加哥)时,它们被存储为+6。我在美国/芝加哥有php和应用服务器,可以通过以下方式确认:Php 在oracle上更正日期时间,php,oracle,symfony,doctrine-orm,doctrine,Php,Oracle,Symfony,Doctrine Orm,Doctrine,我在坚持原则,我所有的约会都取消了。当它们应该是-6(美国/芝加哥)时,它们被存储为+6。我在美国/芝加哥有php和应用服务器,可以通过以下方式确认: php > echo (new \DateTime())->format('Y-m-d h:m:i a e'); 2016-03-02 02:03:47 pm America/Chicago 我在oracle中创建了一个要调试的表: CREATE TABLE "APP"."DATE_TEST" ( "ID" VAR
php > echo (new \DateTime())->format('Y-m-d h:m:i a e');
2016-03-02 02:03:47 pm America/Chicago
我在oracle中创建了一个要调试的表:
CREATE TABLE "APP"."DATE_TEST"
( "ID" VARCHAR2(36 BYTE),
"LOCALTZ" TIMESTAMP (0) WITH LOCAL TIME ZONE,
"NOTLOCALTZ" TIMESTAMP (0) WITH TIME ZONE
)
我有一个具有以下原则映射的测试实体:
Acme\Project\Domain\Asset\Entity\DateTest:
type: entity
table: DATE_TEST
id:
id:
type: guid
generator:
strategy: none
fields:
localtz:
type: datetime
column: localtz
notlocaltz:
type: datetimetz
column: notlocaltz
我执行一些代码将数据推入表中:
protected function execute(InputInterface $input, OutputInterface $output)
{
$test = new DateTest();
$datetime = new \DateTime();
$test->setLocalTz($datetime);
$test->setNotLocalTz($datetime);
$output->writeln($test->getId());
$output->writeln($datetime->format('Y-m-d h:i:s a'));
$output->writeln($datetime->getTimezone()->getName());
$em = $this
->getContainer()
->get('doctrine.orm.entity_manager');
$em->persist($test);
$em->flush();
$output->writeln("Test complete.");
}
将输出以下内容
de4e5dcd-9fd6-4b5d-b9f0-6db9d1ef0582
2016-03-02 02:51:02 pm
America/Chicago
Test complete.
这就是我在数据库中看到的
de4e5dcd-9fd6-4b5d-b9f0-6db9d1ef0582 02-MAR-16 08.51.02.000000000 AM 02-MAR-16 02.51.02.000000000 PM +06:00
我已经把电话接通了
当我查询数据库的当前时间时,它看起来是正确的:
SELECT SYSTIMESTAMP "NOW" FROM DUAL;
02-MAR-16 02.56.44.342456000 PM -06:00
谁能看出我做错了什么 我追踪到OracleSessionInit类设置了错误的时区格式。OraclePlatform类在时间和偏移量之间没有空格,而会话格式在时间和偏移量之间没有空格 在容器中重写该格式解决了我的问题
services:
oci8.listener:
class: Doctrine\DBAL\Event\Listeners\OracleSessionInit
arguments:
- { NLS_TIMESTAMP_TZ_FORMAT: "YYYY-MM-DD HH24:MI:SSTZH:TZM" }
tags:
- { name: doctrine.event_listener, event: postConnect }
我打开了一个窗口,因为我很确定这是一个bug 值得检查吗?通过php执行此查询,如果您使用一个单独的客户机来执行misc db活动,请在那里执行:
SELECT DBTIMEZONE,SESSIONTIMEZONE from dual代码>@Beege执行来自php的查询时,两个查询都返回“+00:00”。这似乎不对…很好的追溯。我无法让我的php返回类似的(糟糕的)结果。