当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2016年11月20日日曜日

日付/時刻の変換を行う(UTC形式編)

皆さん、日曜日にこんにちは。
明日の2016年11月21日と11月22日はXPagesDayです。
仕事もしつつ、自席でWebセミナーを満喫してくださいね。
サイトはこちら。XPagesDay


さて、そんな日曜ですが、今日はそれとは関係ない単なるXPagesの話題です。
しかも、またまた日付/時刻についてです。

XPagesで日付を扱う場合、色々な形式があります。
NotesDateTimeオブジェクト、java.util.Dateオブジェクト等々・・・
また、日付/時刻を表す文字列というのもその一つでしょう。

Notesクライアントでも、「@Text(@Now)」のように、日時をテキスト化することもありますね。
当然、XPagesでもそういったことは可能です。

Notesクライアントで利用していたような日付/時刻の表し方であれば、当ブログでもさんざん書いてきましたので、さほど難しくはないと思います。
しかし、REST APIを使ってデータのやり取りをする場合、ちょっと変わった形式でのやり取りとなります。

下の画像を見てください。
私がサンプルで作成したXPagesアプリケーションで、文書のデータをJSON形式で表示するようにしたものです。
NotesDBの文書をJSON形式で表示

赤枠の個所を見ると、日付/時刻と思われますが、何やら見慣れない形式になっています。
これは、ISO8601形式というUTCの時刻を表現するものです。

REST APIを使って日時データをやり取りする場合は、通常このデータ形式を使うことになっています。
Notesの文書の日時をWebサービスとして提供する場合や、外部のWebサービスの日時データを取得する場合などがそうですね。

となってくると、この文字列をXPagesアプリケーションで理解できるようにする必要があります。
つまり、java.util.DateやNotesDateTime形式への変換ができるようにするということです。


ここで、
Javaの世界には「SimpleDateFormat」というクラスがあります。
それを使えば、自由に表示形式を定義できるのでいいのですが、折角ならXPagesに備わっている関数を使ってできればそれに越したことはないでしょう。



ということで、探してみました。
あるものですね。
I18nクラスにparseDateXMIやtoStringXMIというメソッドが用意されていました。
それぞれ、ISO8601形式の文字列をjava.util.Date形式に変換したり、java.util.Date形式のデータをISO8601形式の文字列に変換するものです。

書式は以下の通り。それぞれサンプルで使っているので、編集ボックスコントロールから取得して計算結果コントロールに埋め込んでいます。
// 日付/時刻データをISO8601型式の文字列に変換
var tmp1 = I18n.toStringXMI( getComponent( "dateTime_InputText1" ).getValue() );
getComponent( "dateTime_ComputedField1" ).setValue( tmp1 );

// ISO8601型式の文字列を日付/時刻データに変換
var tmp2 = I18n.parseDateXMI( getComponent( "dateTime_InputText2" ).getValue() );
getComponent( "dateTime_ComputedField2" ).setValue( tmp2 );



実行結果は下図です。
ISO8601文字列とjava.util.Dateの相互変換

これを覚えれば、REST APIもより使いやすくなるでしょう。
是非、使ってみてください。

それでは今日はこの辺で・・・











Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: