@CsvDateTimeFormat
日時型に対する書式を指定する際に利用するアノテーションです。
アノテーションを付与しないときや属性 pattern
を指定しないときは、クラスタイプごとに決まった標準の書式が適用されます。
対応するJavaのクラスタイプと標準の書式は以下の通りです。
クラスタイプ |
標準の書式 |
---|---|
|
yyyy-MM-dd HH:mm:ss |
|
yyyy-MM-dd HH:mm:ss |
|
yyyy-MM-dd |
|
HH:mm:ss |
|
yyyy-MM-dd HH:mm:ss.SSS |
|
uuuu-MM-dd HH:mm:ss |
|
uuuu-MM-dd |
|
uuuu-MM-dd HH:mm:ssxxx'['VV']' |
|
yyyy-MM-dd HH:mm:ss |
|
yyyy-MM-dd |
|
HH:mm:ss |
|
yyyy-MM-dd HH:mm:ssZZ |
読み込み/書き込み時の書式を指定したい場合
属性
pattern
で書式を指定します。省略した場合、クラスタイプごとの標準の書式が適用されます。
java.util.Date/java.util.Calendar/java.sql.XXXX系のクラスの場合、 java.text.SimpleDateFormat で解釈可能な書式を設定します。
java.time.XXX系のクラスの場合、 java.time.format.DateTimeFormatter で解釈可能な書式を設定します。
org.joda.time.XXX系のクラスの場合は、 org.joda.time.format.DateTimeFormat で解釈可能な書式を設定します。
属性
locale
でロケールを指定します。言語コードのみを指定する場合、
ja
の2桁で指定します。言語コードと国コードを指定する場合、
ja_JP
のようにアンダーバーで区切り指定します。和暦を扱う時など、バリアントを指定する場合も同様に、
ja_JP_JP
のようにさらにアンダーバーで区切り指定します。
属性
timezone
でタイムゾーンを指定します。Asia/Tokyo, GMT, GMT+09:00などの値を指定します。
ただし、オフセットを持たないクラスタイプ「LocalDateTime, LocalDate, LocalTime」の時は、指定しても意味がありません。
書式に合わない値をパースした場合、例外
SuperCsvValidationException
が発生します。
1import com.github.mygreen.supercsv.annotation.CsvBean;
2import com.github.mygreen.supercsv.annotation.CsvColumn;
3import com.github.mygreen.supercsv.annotation.format.CsvDateTimeFormat;
4
5import java.util.Date;
6import java.time.LocalDateTime;
7
8@CsvBean
9public class SampleCsv {
10
11 // 和暦を扱う場合
12 @CsvColumn(number=1)
13 @CsvDateTimeFormat(pattern="GGGGyy年MM月dd日", locale="ja_JP_JP")
14 private Date japaneseDate;
15
16 @CsvColumn(number=2, label="更新日時")
17 @CsvDateTimeFormat(pattern="uuuu/MM/dd HH:mm:ss")
18 private LocalDateTime updateTime;
19
20 // setter/getterは省略
21}
読み込み時に曖昧に解析したい場合
曖昧なケースでも読み込めるようにしたいときは、属性 lenient
の値をtrueにします。
例えば、 2016-02-31 と存在しない日を解析する場合、 2016-03-02 と補正が行われます。
1import com.github.mygreen.supercsv.annotation.CsvBean;
2import com.github.mygreen.supercsv.annotation.CsvColumn;
3import com.github.mygreen.supercsv.annotation.format.CsvDateTimeFormat;
4
5import java.time.LocalDate;
6
7@CsvBean
8public class SampleCsv {
9
10 @CsvColumn(number=1, label="誕生日")
11 @CsvDateTimeFormat(lenient=true)
12 private LocalDate birthday;
13
14 // setter/getterは省略
15}
読み込み時の値のパースに失敗した際のメッセージ
読み込み時に値のパースに失敗した時に独自のメッセージとして、属性 message
で指定することができます。
メッセージ中は、JEXL による式言語を使うことができ、 予め登録されている変数を用いて、メッセージ内容を独自にカスタマイズすることができます。 詳細は、値の検証時のメッセージ を参照してください。
メッセージ中で利用可能な変数は、JavaDoc を参照してください。
1import com.github.mygreen.supercsv.annotation.CsvBean;
2import com.github.mygreen.supercsv.annotation.CsvColumn;
3import com.github.mygreen.supercsv.annotation.format.CsvDateTimeFormat;
4
5import java.time.LocalDate;
6
7@CsvBean
8public class SampleCsv {
9
10 @CsvColumn(number=1, label="誕生日")
11 @CsvDateTimeFormat(pattern="uuuu/M/d", message="[{rowNumber}行, {columnNumber}列] : 項目「{label}」の値({validatedValue})は、日付の書式「{pattern}」として不正です。"
12 private LocalDate birthday;
13
14 // setter/getterは省略
15}