皆さんこんにちは。
今回は Claris FileMaker Pro を使用する際に注意しておきたいタイムスタンプの取り扱いに関するお話です。
Claris FileMaker Pro を使用してシステム開発をしている皆さんの中にはご存じの方も多いかと思いますが、以下の関数を使用した場合の戻り値には要注意です。
- Get(タイムスタンプ)
- Get(ホストのタイムスタンプ)
- Get(タイムスタンプ)
- GetAsTimestamp ( テキスト )
- Get ( 時刻 )
- GetAsTime ( テキスト )
など・・・
これらの関数の戻り値のうち、時刻部分に期待する値の形式は「HH:MM:SS」の形式です。
たとえば、タイムスタンプの値を求めた場合「2022/07/14 11:30:59」という具合に、時刻を示す値は「HH:MM:SS」の形式で値が戻されます。
しかし、たまたま秒がゼロ秒だった場合の戻り値は、「11:30:00」という値を当然のように期待していますが、実際には「11:30」と言う具合に、秒「:00」の部分が省かれた値が戻されてきます。
時刻の値であれば「HH:MM」の形式で「11:30」という値でも良いかもしれませんが、タイムスタンプ形式では、「YYYY/MM/DD HH:MM:SS」という形式が一般的であり、Get ( タイムスタンプ ) 関数に関するヘルプの記述にも・・・・
『システムクロックに「2014 年 1 月 1 日 11:30:00」と表示されている場合、「2014/1/1 11:30:00」を返します。』
https://fmhelp.filemaker.com/help/12/fmp/jp/html/func_ref2.32.25.html?utm_medium=partner&utm_source=F9512007
と記載されています。
と思っていたら、いつのまにか・・・・
『システムクロックに「2019 年 1 月 1 日 11:30:01」と表示されている場合、「2019/01/01 11:30:01」を返します。』
https://help.claris.com/ja/pro-help/content/get-currenttimestamp.html?utm_medium=partner&utm_source=F9512007
と書き替えられておりました・・・・
ということで「:00」秒という例示が「:01」秒に書き替えられたことで、ヘルプとしてはOKなのですが、実際の値としては、何も変わっていません。
我々システム開発者は、Get ( タイムスタンプ )、Get(ホストのタイムスタンプ)関数の戻り値として、「YYYY/MM/DD HH:MM:SS」の完全な形でデータが戻されることを期待していますので、0秒のときに秒が戻されないことで、開発者は知らず知らずにバグを生成することになります。
例えば、FileMaker Pro から別のシステムに、タイムスタンプ型のデータを送らなくてはならない場合、相手側が秒の「:00」を含めた形で、データが送られてくることを期待していた場合、エラーになってしまう可能性があります。
ヘルプでも記載されているように、上記で示しました “タイムスタンプ関連関数および時刻関連関数の戻り値” について、その時刻部分は「HH:MM:SS」の形式を基本として、秒がゼロ秒であった場合でも、秒部分が「:00」で表示されることが正しいように思います。
上記に関連して、Time ( 時 ; 分 ; 秒 )関数では、第3引数の秒が必須となるため「Time ( 11 ; 30; 00 )」のように引数を指定しますが、この場合は「11:30:00」という様に秒まで含まれた値が戻されます。
しかし「Timestamp ( Date ( 1 ; 1 ; 2014 ) ; Time ( 11 ; 30 ; 00 ) )」の戻り値は「2014/01/01 11:30」と、秒の部分が省略されてしまいます。
開発者目線で考えると、タイムスタンプ を取り扱う場合、時の部分が0時の場合は「0:」ではなく「00:」であって欲しいと思います。
なぜなら分が1〜9分の場合は、10の位に「0」が補完され、「01」「02」・・「09」となるからですね。
このように、タイムスタンプを計算式で使用する場合は、少しクセがありますので、注意した方が良いでしょう!
環境:FileMaker Pro 18(19.5.1まで検証済み)
OS:macOS Sierra、Windows 10