私は他の答えに同意しません。この問題の本当の原因は、DateFormat が米国以外の日付文字列を処理するように設計されていないことです。
標準の CF 日付関数では、常に米国の日付解析規則が使用されます。つまり、 のようなあいまいな日付文字列を渡すと、米国英語の日付規則01-05-2013
に従って解析されます。この場合、月が最初、つまり「mm-dd-yyyy」です。したがって、結果は常に 5 月 1 日ではなく 1 月 5 日になります。
場合によっては幸運に恵まれます。文字列15-05-2013
では明らかに 15 番目の月がないため、CF/java はエラーをスローするのではなく、月と日を自動的に交換する必要があります。そのため、一部の日付文字列を正しく処理しているように見えdd-mm-yyyy
ますが、他の日付文字列は正しく処理していないようです。
米国以外の日付文字列を解析する場合は、代わりに LS (Locale Sensitive) 日付関数を使用する必要があります。ただし、ドキュメントによると、ダッシュ ie"-"
は米国以外のほとんどのロケールでは標準の日付区切り記号ではありません: オランダ語とポルトガル語 (標準) のみです。そのため、区切り文字を変更するか、日付を解析するときにこれらの 2 つのロケールのいずれかを使用する必要があります。
lsDateFormat( myDate, "yyyy-mm-dd", "pt_PT")
サイドノート:
余談ですDateFormat
が、日付オブジェクトが必要です。ただし、CF のほとんどの関数と同様に、日付文字列も受け入れる柔軟性があります。これにより、日付文字列=> 日付オブジェクト=> から (フォーマットされた) 日付文字列に再び変換するための遅延ショートカットとして使用できます。日付オブジェクトを使用することをお勧めします (実際には日付文字列も検証する必要があります) が、それはまったく別の会話です ...