SlideShare uma empresa Scribd logo
1 de 46
サマータイム導入?
【開発者編】
その時 Notes/Domino は正確な時刻を刻むのか
サマータイム?2年限定?2時間!
https://www.sankei.com/politics/news/180806/plt1808060002-n1.html
前回のおさらい
Notes/Domino のサマータイム対応
• サマータイムの情報(開始/終了の日時等)はタイムゾーン情報に含まれている
• Notes/Domino は基本的にはOSのタイムゾーン設定に依存している
• サーバーとクライアントの両方で(Windows Update等による)タイムゾーン情
報の更新が必要
• 既存文書の古いタイムゾーン情報を更新するツールが公開されている
• サマータイムの切替日は「ServerTasksAt?=」とプログラム文書に注意せよ
• 2時間進めるサマータイムに対応できるのか?
Notesの
タイムゾーン
タイムゾーンと夏時間の実施状況を示す
「ラベル」
https://www.ibm.com/developerworks/jp/lotus/iris_today/20010301_5.html
フィールドの種類「タイムゾーン」
選択肢
保存される値
式言語と夏時間
タイムゾーンを扱う@関数
@GetCurrentTimeZone
オペレーティングシステムの現在のタイムゾーン設定を、正規のタイム
ゾーン形式で返します
@TimeToTextInZone 日時値を文字列に変換し、このときタイムゾーン情報を取り込みます
@TimeZoneToText 正規のタイムゾーン値を、読み取り可能な文字列に変換します
@TimeMerge
別々に指定された日付、時刻、およびタイムゾーンの値から日時値を作
成します
@Zone
現在のコンピュータまたは指定された日時値のタイムゾーン設定を返し、
サマータイムを実施しているかどうかを示します
タイムゾーンを扱う@関数
@GetCurrentTimeZone
オペレーティングシステムの現在のタイムゾーン設定を、正規のタイム
ゾーン形式で返します
@TimeToTextInZone 日時値を文字列に変換し、このときタイムゾーン情報を取り込みます
@TimeZoneToText 正規のタイムゾーン値を、読み取り可能な文字列に変換します
@TimeMerge
別々に指定された日付、時刻、およびタイムゾーンの値から日時値を作
成します
@Zone
現在のコンピュータまたは指定された日時値のタイムゾーン設定を返し、
サマータイムを実施しているかどうかを示します
【参考】正規のタイムゾーン値
Z=9$DO=1$DL=4 1 1 10 -1 1$ZX=1$ZN=Alaskan
Z タイムゾーンの GMT からの時差。上記はGMTの9時間後であることを示している
DO サマータイム (DST : Daylight Saving Time) 監視フラグ。
1 はサマータイムが有効であることを示し、0 は無効であることを示します。1 の場合は
DL に値が渡されます
DL <開始月> <開始週> <開始曜日> <終了月> <終了週> <終了曜日> を特定するサマータイ
ムのルール
ZX ホスト固有のタイムゾーンインデックス
ZN タイムゾーン名
正規のタイムゾーン値には、夏時間を適用する「年」、開始/終
了の「時刻」、「進める時間の長さ」を示す情報が無い
【検証】日本のタイムゾーン値を変える
Z=-9$DO=1$DL=4 1 1 10 1 1$ZX=110$ZN=Tokyo
4月の第一日曜 10月の第一日曜
夏時間を有効化
@GetCurrentTimezone の戻り値
“Z=-9$DO=0$ZX=110$ZN=Tokyo”
【検証】日本のタイムゾーン値を変える
夏時間の実施状況
z := "Z=-9$DO=1$DL=4 1 1 10 1 1$ZX=110$ZN=Tokyo";
dt := [2018/xx/15 12:00:00];
tm := @TimeMerge ( @Date( dt ); @Time( dt ); z )
1時間戻る? 1時間進む開始/終了が逆?
【参考】デフォルトの切り替え時刻
https://www-01.ibm.com/support/docview.wss?uid=ibm10734019
Notes.ini にDSTLAWTIME が定義されていない場合
夏時間は午前2時に始まり、午前1時に終わる
【検証】日本のタイムゾーン値を変える
切り替え時刻
z := "Z=-9$DO=1$DL=4 1 1 10 1 1$ZX=110$ZN=Tokyo";
dt := [2018/04/01 01:00:00];
tm := @TimeMerge ( @Date( dt ); @Time( dt ); z )
開始日の4時?終了日の1時? 開始日の2時、終了日の1時
【検証】日本のタイムゾーン値を変える
結果
@TimeMerge + @Text
• 正規のタイムゾーン値がOS
のタイムゾーン値と異なる
場合、想定した日時が返ら
ない?
@TimeToTextInZone
• 想定した値が返る
式言語
日付コーディング
の癖
OSのタイムゾーンを変えて検証
Designer 上で現地時刻に自動変換
ZE9で保存、PSTで開く
OSのタイムゾーン:ZE9 OSのタイムゾーン:PST
@Text の結果はどちらも
“2018/10/10 12:00:00 ZE9”
夏時間の自動変換(開始日時)
OSのタイムゾーン:PST
存在しない時刻を指定すると
(1時59分59秒の1秒後は3時)
存在する時刻へ自動変換
夏時間の自動変換(終了日時)
OSのタイムゾーン:PST
式 結果
@Text([2018/11/04 00:59:59]; "D0T0Z2") 2018/11/04 00:59:59 PDT
@Text([2018/11/04 01:00:00]; "D0T0Z2") 2018/11/04 01:00:00 PST
1秒後のつもりで指定すると…
(1秒後は 2018/11/04 00:00:00 PST だが)
1時間と1秒後
日時はそのまま、ラベルだけ変わる
dt :=@TextToTime( "2018/10/10 12:00:00" )
OSのタイムゾーン @Text( dt; “D0T0Z2“ ) の結果
ZE9 2018/10/10 12:00:00 ZE9
PST 2018/10/10 12:00:00 PDT
@TextToTime の値にタイムゾーンが無い場合、
現在のOSのタイムゾーンが適用される。
特定の地域の日時をハードコードするなら
dt := @TextToTime( "2018/10/10 12:00:00 ZE9" )
OSのタイムゾーン @Text( dt; “D0T0Z2“ ) の結果
ZE9 2018/10/10 12:00:00 ZE9
PST 2018/10/10 12:00:00 ZE9
@TextToTime の値にあるラベルが
現在のOSのタイムゾーンより優先される。
※無効なラベルを指定すると、OSのタイムゾーン(ローカル時刻)になる
異なるタイムゾーンにおける
ラベルの不一致
OSのタイムゾーン @Text( a; "D0T0Z2“ )
ZE9 2018/11/10 12:00:00 PDT
PST 2018/11/10 12:00:00 PST
dt := @TextToTime("2018/10/10 12:00:00 PDT");
a := @Adjust( dt; 0; 1; 0; 0; 0; 0; [InGMT] );
OSのタイムゾーンが異なる場
合、夏時間が有効のまま
OSのタイムゾーンがPSTの場
合、標準時に変換される
10月10日の1カ月後は
標準時(PST)に戻る
LotusScript と
夏時間
LotusScript に日付/時刻データ型は無い
https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/LSAZ_SUMMARY_OF_LOTUSSCRIPT_DATA_TYPES.html
日時を扱う関数の戻り値は Variant 型
日付/時刻
CDat 関数
Now 関数
日付のみ
Date 関数
DateNumber 関数
DataValue 関数
Today 関数
時刻のみ
Time 関数
TimeNumber 関数
TimeValue 関数
タイムゾーンを扱う関数は存在しない
Variant 型の日付
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
64ビット(= 8バイト)
整数部=日付 小数部=時刻
LotusScript では日付として西暦100年1月1日(-657434)から9999
年12月31日(2958465)までの範囲を許容
0は1899年12月30日を表す
うーん…
Dim varTime As Variant
varTime = CDat( "2018/10/10 10:00 AM ZE9" )
Variant 型はタイムゾーンを扱えない
では、どうする?
NotesDateTime クラス
メソッド
AdjustDay
AdjustHour
AdjustMinute
AdjustMonth
AdjustSecond
AdjustYear
ConvertToZone
New
SetAnyDate
SetAnyTime
SetNow
TimeDifference
TimeDifferenceDouble
プロパティ
DateOnly
GMTTime
IsDST
IsValidDate
LocalTime
LSGMTTime
LSLocalTime
Parent
TimeOnly
TimeZone
ZoneTime
【参考】NotesDateTimeクラスのプロパティ
プロパティ 値
GMTTIME GMTの時刻(文字列)
LOCALTIME GMTTIMEをOSのタイムゾーンに合わ
せた時刻(文字列)
ZONETIME GMTTIMEからTIMEZONEのオフセッ
トとISDSTを反映した時刻(文字列)
TIMEZONE タイムゾーン(-12から12)
ISDST 夏時間有効のときTrue
使い分けが必要
Variant 型 NotesDateTime クラス
タイムゾーン 扱わない 扱う
夏時間 扱わない 扱う
タイムゾーンの
ラベルに注目
Variant から NotesDateTime へ変換
日時値にOSのタイムゾーン設定が反映
PDT 太平洋夏時間
UTC -7
ZE9 日本標準時
UTC +9
計算結果に夏時間が反映する
【OSのタイムゾーン設定】
太平洋標準時
2018年の夏時間は
11月4日 2時0分に終了
PDT 太平洋夏時間
UTC -7
PST 太平洋標準時
UTC -8
2カ月加算
計算結果に夏時間が反映しない
【OSのタイムゾーン設定】
日本標準時
PDT 太平洋夏時間
UTC -7
PDT のまま!!
2カ月加算
異なるタイムゾーンにおける
ラベルの不一致
ラベルは PST になる ラベルは PDT のまま
2018年11月5日は太平洋標準時 PST で夏時間終了の翌日だが、
あえて夏時間を示すラベル PDT を付けて変換を試みた
OSのタイムゾーンをPSTに設定 OSのタイムゾーンをZE9に設定
IsDST は False に変わる IsDST は True のまま
まとめ
夏時間対応の完全な検証実施は
OSのタイムゾーン情報更新なしには困難
式言語 LotusScript
タイムゾーンの扱い ○ NotesDateTimeクラス
夏時間の扱い ○ NotesDateTimeクラス
夏時間実施の切替 ○ NotesDateTimeクラス
夏時間の開始/終了日付指定 ○ ×
夏時間の開始/終了時刻指定 × ×
繰り上げ時間の指定 × ×
異なるタイムゾーンの夏時間に絡
む日時の計算
× ×
ところで
ラベル「JST」は
有効?
JST 日本標準時の記載あり
https://www.ibm.com/developerworks/jp/lotus/iris_today/20010301_5.html
ラベルのリストを取得する
@LocationGetTZ(1)
JST が無い…
夏時間のラベル
も無い…
どのラベルが有効?
Dim dateTime As New NotesDateTime("Today 06:00")
msg = "Zone" & Chr(9) + "Time"
For i = -12 To 12
Call dateTime.ConvertToZone(i, False)
msg = msg & Chr(10) & dateTime.TimeZone & Chr(9) & _
dateTime.ZoneTime
Next
MessageBox msg,, "Today 06:00 Standard Time"
False: 標準時
True: 夏時間
標準時 夏時間
JST は無い…
夏時間の
ラベルはある
JST は自動変換できない
Shift + F9
Shift + F9
OSのタイムゾーン時刻になる
※つまりサポートされていない?
Shift + F9
勝手な想像ですが…
https://github.com/eggert/tz/blob/2018c/asia
# JST Jerusalem Standard Time [Danny Braniss, Hebrew University]
# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).
エルサレム標準時も「JST」と呼ばれ、タイムゾーンの特定が困難なため
Notesで使われなくなったのでは?
ご清聴ありがとうございました

Mais conteúdo relacionado

Semelhante a サマータイム導入?【開発者編】 - その時 Notes/Domino は正確な時を刻むのか

Semelhante a サマータイム導入?【開発者編】 - その時 Notes/Domino は正確な時を刻むのか (6)

20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
160705-01 RTミドルウエア講習会・名城大
160705-01 RTミドルウエア講習会・名城大160705-01 RTミドルウエア講習会・名城大
160705-01 RTミドルウエア講習会・名城大
 
DateTimeX::Moment
DateTimeX::MomentDateTimeX::Moment
DateTimeX::Moment
 
Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2
 
Open lab2013パネル原稿集
Open lab2013パネル原稿集Open lab2013パネル原稿集
Open lab2013パネル原稿集
 
Linuxの2038年問題を調べてみた
Linuxの2038年問題を調べてみたLinuxの2038年問題を調べてみた
Linuxの2038年問題を調べてみた
 

Mais de Haruyuki Nakano

Mais de Haruyuki Nakano (20)

NotesQueryResultsProcessor.pptx
NotesQueryResultsProcessor.pptxNotesQueryResultsProcessor.pptx
NotesQueryResultsProcessor.pptx
 
プロフィール文書って何?
プロフィール文書って何?プロフィール文書って何?
プロフィール文書って何?
 
Nomad開発の苦悩つ
Nomad開発の苦悩つNomad開発の苦悩つ
Nomad開発の苦悩つ
 
どうしてもドメインがほしくなった訳
どうしてもドメインがほしくなった訳どうしてもドメインがほしくなった訳
どうしてもドメインがほしくなった訳
 
個人フォルダの作成権限
個人フォルダの作成権限個人フォルダの作成権限
個人フォルダの作成権限
 
Domino v12の新機能 - 多要素認証対応 (TOTP) -
Domino v12の新機能 - 多要素認証対応 (TOTP) -Domino v12の新機能 - 多要素認証対応 (TOTP) -
Domino v12の新機能 - 多要素認証対応 (TOTP) -
 
V12 TLS証明書管理の自動化
V12 TLS証明書管理の自動化V12 TLS証明書管理の自動化
V12 TLS証明書管理の自動化
 
V12 DAOS 拡張
V12 DAOS 拡張V12 DAOS 拡張
V12 DAOS 拡張
 
ベータフォーラムってこんなとこ
ベータフォーラムってこんなとこベータフォーラムってこんなとこ
ベータフォーラムってこんなとこ
 
V12 の DAOS はさらに使いやすくなるかも⁉
V12 の DAOS はさらに使いやすくなるかも⁉V12 の DAOS はさらに使いやすくなるかも⁉
V12 の DAOS はさらに使いやすくなるかも⁉
 
オレのDocker元年
オレのDocker元年オレのDocker元年
オレのDocker元年
 
パブリック文書/パブリックアクセス
パブリック文書/パブリックアクセスパブリック文書/パブリックアクセス
パブリック文書/パブリックアクセス
 
初めての HCL Sametime
初めての HCL Sametime初めての HCL Sametime
初めての HCL Sametime
 
読者/作成者 フィールド
読者/作成者 フィールド読者/作成者 フィールド
読者/作成者 フィールド
 
HCL Nomad で GPS へアクセスしよう
HCL Nomad で GPS へアクセスしようHCL Nomad で GPS へアクセスしよう
HCL Nomad で GPS へアクセスしよう
 
HCL Nomad と OCR
HCL Nomad と OCRHCL Nomad と OCR
HCL Nomad と OCR
 
Notes Domino Solution 2019 資料
Notes Domino Solution 2019 資料Notes Domino Solution 2019 資料
Notes Domino Solution 2019 資料
 
テーマカラーをロータス色に変えてみた
テーマカラーをロータス色に変えてみたテーマカラーをロータス色に変えてみた
テーマカラーをロータス色に変えてみた
 
ビュー索引のキホン(後編)
ビュー索引のキホン(後編)ビュー索引のキホン(後編)
ビュー索引のキホン(後編)
 
ビュー索引のキホン(前編)
ビュー索引のキホン(前編)ビュー索引のキホン(前編)
ビュー索引のキホン(前編)
 

サマータイム導入?【開発者編】 - その時 Notes/Domino は正確な時を刻むのか

Notas do Editor

  1. DSTLAWTIME は 9.0.1 FP4 から有効な notes.ini のパラメータ
  2. 倍精度浮動小数点数
  3. Now はOSのタイムゾーン設定に従った現在時刻を返す
  4. OSのタイムゾーン情報で夏時間が有効の場合、加算した値に従い、標準時と夏時間を自動変換する
  5. OSのタイムゾーン情報で夏時間が有効でない場合、他の夏時間が有効なタイムゾーンのラベルを指定しても、標準時と夏時間を正しく変換できない。
  6. OSのタイムゾーン(DST)情報とNotesDateTimeクラスにセットする日時値のタイムゾーンが同じ場合、自動変換されることが確認できた。
  7. 「2006年 9月配信」の情報にはノーツのタイムゾーンとして日本標準時 JST の記載がある
  8. @LocationGetTZ はドキュメント化されていない関数です。 前頁のWebページには日本標準時のラベルとして JST が紹介されているが、@LocationGetTZ(1)のリストにJSTは存在しない。 夏時間のラベルが取得できるのかは不明 @LocationGetTZ(0) は次のような情報を取得できる (UTC+08:00) パース|0$129$W. Australia Standard Time$-8 (UTC+08:45) ユークラ|0$11$Aus Central W. Standard Time$-4508 (UTC+09:00) ソウル|0$59$Korea Standard Time$-9 (UTC+09:00) 平壌|1$82$North Korea Standard Time$-9 (UTC+09:00) 大阪、札幌、東京|0$111$Tokyo Standard Time$-9 (UTC+09:00) チタ|0$114$Transbaikal Standard Time$-9 (UTC+09:00) ヤクーツク|0$136$Yakutsk Standard Time$-9 (UTC+09:30) ダーウィン|0$10$AUS Central Standard Time$-3009
  9. 図はOSのタイムゾーンをZE9(夏時間を実施していないゾーン)に設定して実行した結果