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

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

2010年2月19日金曜日

0:00:00の1時間後は0:00:00?

約3週間ぶりの投稿です。ネタがないのが原因です。スミマセン。

今日は、またもや日付関係のネタです。Lotus Notes/Dominoはなんで、こんなに日付の取扱が難しいんでしょう。他の言語でも同じだとは思いますが、やはり骨が折れます。

久しぶりの投稿にもかかわらず、今日もお願いボタンです。
にほんブログ村 IT技術ブログへ
クリックすると、筆者が救われます(笑)。でも、1人1回で十分です。

今日は、日付フィールドを元にNotesDateTimeオブジェクトを生成したときのトラブルについてです。
日付フィールドを使う事は多々あるかと思います。
ノーツでは、日付フィールドは「日付のみ」「時刻のみ」「日付と時刻」という形の3種類作成する事ができます(そもそもこんな仕様が憎いんですけどね・・・)。
この中で、「日付と時刻」という形で作成すると、データは
2010/02/19 11:48:33 ZE9
というように格納されます。

実際に「testDateTime」というフィールドを作成して、その値を表示するサンプルプログラムとその結果です。念のため、文書を保存して、文書のプロパティでも確認してみました。
Sub Click(Source As Button)
 Dim uiws As New NotesUIWorkspace
 Dim uidoc As NotesUIDocument
 Dim udoc As NotesDocument
 
 Set uidoc = uiws.CurrentDocument
 Set udoc = uidoc.Document
 
 Msgbox _
 "日時: " & udoc.testDateTime(0), _
 MB_OK, "日時フィールドの値"
End Sub





文書のプロパティでは、タイムゾーンが付いていますが、NotesDocument#GetItemValueメソッドでは、省かれていますね。どうも、GetItemValueは、タイムゾーンを自動で計算して表示するようです。


ここで、testDateTimeフィールドの値が2010/02/20 0:00:00だったとしましょう。
さて、NotesDocument#GetItemValueはどのような値を返すでしょう?

上の画面を見ていただくと分かるように、なんと、時刻を返してくれないのです。

この値を元に、NotesDateTimeを生成すると、時刻(TimeOnly)は空白になってしまうのです。
さらにこの状態で、AdjustHourメソッドを使っても当然、時間は進みません。


では、どうしたら、正しく「0:00:00」を取得してくれるのでしょうか?
以下に修正したサンプルを書きます。
Sub Click(Source As Button)
 Dim uiws As New NotesUIWorkspace
 Dim uidoc As NotesUIDocument
 Dim udoc As NotesDocument
 Dim item1 As NotesItem
 Dim dtv1 As NotesDateTime
 
 Set uidoc = uiws.CurrentDocument
 Set udoc = uidoc.Document
 Set item1 = udoc.GetFirstItem( "testDateTime" )
 Set dtv1 = item1.DateTimeValue
 
 Msgbox _
 "日時: " & dtv1.LocalTime & Chr$(10) & _
 "TimeOnly: " & dtv1.TimeOnly,_
 MB_OK, "各フィールドの値"
End Sub



どうでしょう?
日時ともに表示されていて、さらにTimeOnlyが空白ではなく、"00:00:00"となっているのが分かりますでしょうか?
一度、NotesItemとして取得して、その中のDateTimeValueというプロパティを使って、NotesDateTimeを生成するのです。
こうすると、正しく日付が生成されるという事です。

日付を取り扱う際は、注意しましょう。
筆者は危うく、不具合を出すところでした(汗)


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: