4D-jp 4D Japan Technical Support Team

2桁の年は注意が必要

2020-06-30

4Dでは,日付リテラル(定数)をメソッドエディターに記述することができます。

$日付:=!1920-06-30!

ドキュメントに記述されているように,日付リテラルのフォーマットはv15で改定されました。

  • 区切り文字はハイフン(-
  • 年月日の順序はYYYY-MM-DD
  • 空の日付は00-00-00

過去のバージョンでは,区切り文字と年月日の順序はシステムのロケール(地域と言語)設定に左右されました。世界的にみて,もっとも一般的なフォーマットは「日月年」または「月日年」,区切り文字はピリオド(.)またはスラッシュ(/)記号というものです。

メソッドに入力された日付リテラルは,トークナイズされ,内部的に「年・月・日」に分解されて保存されます。システムのロケールが違う環境でメソッドを開いた場合,日付リテラルのフォーマットは自動的に変換されますが,コピー&ペーストをしたり,メソッドのソースコードをテキスト形式でインポートした場合は,別の値になってしまう恐れがあります。

日本のように「年月日」という順序を採用しているロケールはあまり多くありません。また,区切り文字にハイフン記号を使用しているロケールも,スウェーデン語など,ごく少数です。大抵の地域では,日付リテラルの仕様がv15で変更されたことにすぐに気づきましたが,日本の場合,以前の仕様がISOフォーマットに似ているため,変更に気づかなかったかもしれません。

メソッドエディターにピリオド(.)またはスラッシュ(/)区切りで日付リテラルを入力した場合,トークナイズにより,区切り文字が自動的に変換されてハイフン(-)になります。同時に,2桁で入力された年は自動的に4桁に変換されます。

  • !20/6/30!!2020-06-30!
  • !20.6.30!!2020-06-30!

SET DEFAULT CENTURYでデフォルト世紀を変更しない限り,29年以前の日付は21世紀,30年以降の日付は20世紀,とみなされます。

両方の区切り文字にハイフン(-)を入力した場合,2桁で入力された年はトークナイズで4桁に変換されません。下記の例では,1世紀の日付を入力したことになります。

  • !20-6-30!!20-06-30!

当然,この日付で検索を実行した場合,1920年あるいは2020年のレコードはヒットしません。

メソッド日付リテラルを記述する場合,下記いずれかの方法で入力するように注意してください。

  • 区切り文字はピリオド(.)またはスラッシュ(/)を使用する(4桁に変換されます)
  • 区切り文字はハイフン(-)を使用するのであれば,年を4桁で入力する

関連記事

リンク