DT

文字列の入出力方法

Author : trashtoy

Table of Contents

文字列の入出力方法 

parse および format メソッドを使うことで, 文字列と時間オブジェクトを相互変換することが出来ます. 以下に簡単な例を示します.

  1. $d1 Peach_DT_Date::parse("2012-05-21");
  2. $d2 $d1->add("date"10);
  3. echo $d2->format()// "2012-06-01"

時間オブジェクトの __toString メソッドは内部で format() を呼び出します. 以下のコードはすべて同じ文字列 ("2012-05-21") を出力します.

  1. $d1 new Peach_DT_Date(2012521);
  2. echo $d1->format();
  3. echo $d1->__toString();
  4. echo $d1;

フォーマットオブジェクトを指定した入出力

format() の引数に任意の Peach_DT_Format オブジェクトを指定することで, 任意の形式で文字列を出力することが出来ます.

  1. // タイムゾーンが仮に Asia/Tokyo (UTC+9) に設定されているものとする
  2.  
  3.  
  4. $d new Peach_DT_Timestamp(201252173045);
  5. var_dump($d->format($f1))// string(19) "2012-05-21T07:30:45"
  6. var_dump($d->format($f2))// string(29) "Sun, 20 May 2012 22:30:45 GMT"
  7. var_dump($d->format($f3))// string(10) "1337553045"

parse() の第 2 引数に Peach_DT_Format オブジェクトを指定することで, 特定の形式の文字列を解析することができます. 以下のコードの $d1, $d2, $d3 は全て等価なオブジェクト (2012-05-21T07:30:45) になります.

  1. // タイムゾーンが仮に Asia/Tokyo (UTC+9) に設定されているものとする
  2.  
  3.  
  4. $d1 Peach_DT_Timestamp::parse("2012-05-21T07:30:45",           $f1);
  5. $d2 Peach_DT_Timestamp::parse("Sun, 20 May 2012 22:30:45 GMT"$f2);
  6. $d3 Peach_DT_Timestamp::parse(1337553045$f3);

ユーザー定義のパターンで入出力したい場合

クラス Peach_DT_SimpleFormat を使うことで, ユーザー定義の日付・時刻パターンで文字列解析と書式化が出来ます. Java で例えると SimpleDateFormat と同じような役割のクラスです.

  1. $f new Peach_DT_SimpleFormat("Y/m/d");
  2. $d Peach_DT_Date::parse("2012/05/21"$f);
  3. $d->add("date"20);
  4. echo $d->format($f)// "2012/06/10"

入出力時のタイムゾーンの自動変換

例えばニューヨークに設置してあるサーバーで日本向けの Web サイトを運営しているとしましょう. サーバーのタイムゾーン設定は UTC-5 (-300 分), Web サイトの時刻は UTC+9 (+540 分) で表示したいという要件も, DT_ShiftFormat を使えば簡単に実現できます.

  1. $f new Peach_DT_ShiftFormat(new Peach_DT_SimpleFormat("Y/m/d H:i:s")-540300);
  2. $d new Peach_DT_Timestamp(201211000)// サーバー内部の時刻
  3. echo $d->format($f);                        // "2012/01/01 14:00:00" (UTC-5 から UTC+9 に変換)

Peach_DT_W3cDatetimeFormatPeach_DT_HttpDateFormat など, タイムゾーンの自動変換機能を単体でサポートしているフォーマットもあります. 以下に例を挙げます.

  1. $f new Peach_DT_W3cDatetimeFormat(-540300);
  2. $d new Peach_DT_Timestamp(201211000);
  3. echo $d->format($f)// "2012-01-01T14:00+09:00"

引数に時差を指定する場合, UTC の西側のタイムゾーンが正,東側が負となります. (Javascript の Date.getTimeZoneOffset() と同じです)