2

PHP 5.3 にアップグレードした後、アプリケーションはタイムスタンプ タイプが「2010-12-15-10.23.22.716000」の DB2 列を返します。これは、PHP の DateTime 関数で問題を引き起こしています。

$time = new DateTime("2010-12-15-10.23.22.716000");

位置 25 (0) で時間文字列 (2010-12-15-10.23.22.716000) を解析できませんでした: 予期しない文字です

DB2 タイムスタンプの精度が高すぎるという問題があるようです。データをフェッチしている状態で、何らかの方法で接続を強制的にタイムスタンプ形式を変更することはできますか?

次のような db2_connect 関数を使用してデータベースに接続しています。

$this->connection = db2_connect ( $config ['dsn'], $config ['username'], $config ['password'] );

編集: 以下の解決策を使用したいのですが、うまく機能せず、私のシステム (AS400) では動作がおかしくなります。$timeRec = DateTime::createFromFormat('Ymdh.isu',$value);

$value = $timeRec->format('Y-m-d H:i:s');

$value = new DibiDateTime($value);

->format の後に var_dump($value) を実行すると、正しい文字列が返されますが、この文字列を DibiDateTime にフィードしようとすると、次のようになります。

public function __construct($time = 'now', DateTimeZone $timezone = NULL)
{    
    if ($timezone === NULL) {
        parent::__construct($time);
    } 
}   

その後、次のように失敗します。

非オブジェクトの関数 format()

以前に var_dump($timeRec) で確認したときでも、適切な DateTime オブジェクトです。

4

1 に答える 1

7

あなたの関数は(それが何であれ)、日付文字列の最後のマイクロ秒で窒息していると思います。DateTime::createFromFormat()'u' マイクロ秒タグを使用してこれに対処する関数を使用します。ここを参照してくださいhttp://php.net/manual/en/function.date.php

$time = DateTime::createFromFormat('Y-m-d-h.i.s.u', '2010-12-15-10.23.22.716000');
var_dump($time);

私のシステムでの出力:-

object(DateTime)[1]
  public 'date' => string '2010-12-15 10:23:22' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)
于 2012-09-29T15:50:51.260 に答える