Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在oracle上更正日期时间_Php_Oracle_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Php 在oracle上更正日期时间

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

我在坚持原则,我所有的约会都取消了。当它们应该是-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" 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返回类似的(糟糕的)结果。