Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サマータイム導入【開発者編】
Search
Haruyuki Nakano
September 17, 2022
Technology
0
1.1k
サマータイム導入【開発者編】
日本でもサマータイムが導入されたら Domino にどのような影響があるのかを検証してみました。
2018年12月13日開催の「のの会 第10回」で使用した資料です。
Haruyuki Nakano
September 17, 2022
Tweet
Share
More Decks by Haruyuki Nakano
See All by Haruyuki Nakano
HCL Domino 14.5 EAP2 Domino IQ について
harunakano
0
25
HCL Notes/Domino 14.5 EAP Drop1
harunakano
1
170
ブラウザでNotesアプリ開発!?HCL Nomad Designer で始めよう!
harunakano
0
87
HCL Domino 14.0 AutoUpdate を試してみた
harunakano
0
3.4k
HCL Nomad Designer 1.0.11
harunakano
0
290
HCL Notes 14.0 「スタイルの変更」で「3 設定の確認」を深掘り
harunakano
0
8.1k
HCL Notes 14.0 EA2 Domino Restyle を試してみた
harunakano
0
490
HCL Nomad 1.0.7 Restyle
harunakano
0
240
添付された日本語テキストファイルを全文検索でヒットさせる方法
harunakano
0
16k
Other Decks in Technology
See All in Technology
なぜ私は自分が使わないサービスを作るのか? / Why would I create a service that I would not use?
aiandrox
0
880
偏光画像処理ライブラリを作った話
elerac
1
120
依存パッケージの更新はコツコツが勝つコツ! / phpcon_nagoya2025
blue_goheimochi
3
180
Reading Code Is Harder Than Writing It
trishagee
2
110
室長と気ままに学ぶマイクロソフトのビジネスアプリケーションとビジネスプロセス
ryoheig0405
0
370
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
tomzoh
0
140
The Future of SEO: The Impact of AI on Search
badams
0
240
白金鉱業Meetup Vol.17_あるデータサイエンティストのデータマネジメントとの向き合い方
brainpadpr
7
910
ESXi で仮想化した ARM 環境で LLM を動作させてみるぞ
unnowataru
0
130
Visualize, Visualize, Visualize and rclone
tomoaki0705
9
68k
次世代KYC活動報告 / 20250219-BizDay17-KYC-nextgen
oidfj
0
370
Classmethod AI Talks(CATs) #17 司会進行スライド(2025.02.19) / classmethod-ai-talks-aka-cats_moderator-slides_vol17_2025-02-19
shinyaa31
0
160
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1368
200k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Building Adaptive Systems
keathley
40
2.4k
For a Future-Friendly Web
brad_frost
176
9.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Scaling GitHub
holman
459
140k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Embracing the Ebb and Flow
colly
84
4.6k
We Have a Design System, Now What?
morganepeng
51
7.4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Code Reviewing Like a Champion
maltzj
521
39k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Transcript
サマータイム導入? 【開発者編】 その時 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で使われなくなったのでは?
ご清聴ありがとうございました