com.github.mygreen.supercsv.annotation.format.CsvDateTimeFormat Maven / Gradle / Ivy
Show all versions of super-csv-annotation Show documentation
package com.github.mygreen.supercsv.annotation.format;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.TimeZone;
import org.supercsv.cellprocessor.ift.CellProcessor;
/**
* 日時型の書式を定義するためのアノテーションです。
*
* アノテーションを付与しないときや属性{@link #pattern()}を指定しないときは、クラスタイプごとに決まった標準の書式が適用されます。
*
対応しているクラスタイプと標準の書式は以下の通りです。
*
*
*
* 対応する日時のクラスタイプと標準の書式
*
*
* クラスタイプ
* 標準の書式
*
*
*
*
* java.util.Date
* {@literal yyyy-MM-dd HH:mm:ss}
*
*
* java.util.Calendar
* {@literal yyyy-MM-dd HH:mm:ss}
*
*
* java.sql.Date
* {@literal yyyy-MM-dd}
*
*
* java.sql.Time
* {@literal HH:mm:ss}
*
*
* java.sql.Timestamp
* {@literal yyyy-MM-dd HH:mm:ss.SSS}
*
*
* java.time.LocalDateTime
* {@literal uuuu-MM-dd HH:mm:ss}
*
*
* java.time.LocalDate
* {@literal uuuu-MM-dd}
*
*
* java.time.LocalTime
* {@literal HH:mm:ss}
*
*
* java.time.ZonedDateTime
* {@literal uuuu-MM-dd HH:mm:ssxxx'['VV']'}
*
*
* java.time.OffsetDateTime
* {@literal uuuu-MM-dd HH:mm:ssxxx}
*
*
* java.time.OffsetTime
* {@literal HH:mm:ssxxx}
*
*
* java.time.Year
* {@literal uuuu}
*
*
* java.time.YearMonth
* {@literal uuuu-MM}
*
*
* java.time.MonthDay
* {@literal MM-dd}
*
*
* org.joda.time.LocalDateTime
* {@literal yyyy-MM-dd HH:mm:ss}
*
*
* org.joda.time.LocalDate
* {@literal yyyy-MM-dd}
*
*
* org.joda.time.LocalTime
* {@literal HH:mm:ss}
*
*
* org.joda.time.DateTime
* {@literal yyyy-MM-dd HH:mm:ssZZ}
*
*
* org.joda.time.YearMonth
* {@literal yyyy-MM}
*
*
* org.joda.time.MonthDay
* {@literal MM-dd}
*
*
*
*
*
* 基本的な使い方
*
*
* - 属性{@link #pattern()}で、書式を指定します。
*
省略した場合は、標準の書式が適用されます。
*
* - 属性{@link #locale()}でロケールを指定します。
*
* - 言語コードのみを指定する場合、{@literal ja} の2桁で指定します。
* - 言語コードと国コードを指定する場合、{@literal ja_JP} のようにアンダーバーで区切り指定します。
* - 和暦を扱う時など、バリアントを指定する場合も同様に、{@literal ja_JP_JP} のようにさらにアンダーバーで区切り指定します。
*
*
*
*
*
* {@literal @CsvBean}
* public class SampleCsv {
*
* // 和暦を扱う場合
* {@literal @CsvColumn(number=1)}
* {@literal @CsvDateTimeFormat(pattern="GGGGyy年MM月dd日", locale="ja_JP_JP")}
* private Date japaneseDate;
*
* {@literal @CsvColumn(number=2, label="更新日時")}
* {@literal @CsvDateTimeFormat(pattern="uuuu/MM/dd HH:mm:ss")}
* private LocalDateTime updateTime;
*
* // getter/setterは省略
* }
*
*
* @version 2.0
* @author T.TSUCHIE
*
*/
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CsvDateTimeFormat {
/**
* 日時の書式を指定します。
* クラスタイプごとに、指定可能な書式は異なります。
* {@literal java.util.Date/java.util.Calendar/java.sql.Date/java.sql.Time/java.sql.Timestamp}の場合、
* {@link java.text.SimpleDateFormat}で解釈可能な書式を指定します。
*
* {@literal java.time.LocalDateTime/java.time.LocalDate/java.time.LocalTime/java.time.ZonedDateTime/java.time.OffsetDateTime/java.time.OffsetTime/java.time.Year/java.time,YearMonth/java.time/MonthDay}の場合、
* {@link java.time.format.DateTimeFormatter}で解釈可能な書式を指定します。
*
* {@literal org.joda.time.LocalDateTime/org.joda.time.LocalDate/org.joda.time.LocalTime/org.joda.time.YearMonth/org.joda.time.MonthDay}の場合、
* {@link org.joda.time.format.DateTimeFormat}で解釈可能な書式を指定します。
*
* @return 指定しない場合は、クラスタイプごとの標準の書式が適用されます。
*/
String pattern() default "";
/**
* 読み込み時に日時の解析を曖昧に行うか指定します。
* 曖昧に解析する場合、例えば、{@literal 2016-02-31} と存在しない日を解析すると、{@literal 2016-03-02} と自動的に補正が行われます。
* @return trueの場合、曖昧に解析を行います。
*/
boolean lenient() default false;
/**
* タイムゾーンを指定します。
* {@link TimeZone#getTimeZone(String)}で解釈可能な値を指定する必要があります。
* {@literal Asia/Tokyo, GMT, GMT+09:00}などの値を指定します。
* ただし、オフセットを持たないクラスタイプ{@literal LocalDateTime, LocalDate, LocalTime}の時は、指定しても意味がありません。
* @return 省略した場合、システム標準の値を使用します。
*/
String timezone() default "";
/**
* ロケールを指定します。
* {@literal <言語コード>}、{@literal <言語コード>_<国コード>}、{@literal <言語コード>_<国コード>_<バリアント>}の3つの何れかで書式を指定します。
* 例 'ja'、'ja_JP'、'ja_JP_JP'
* @return 省略した場合、システム標準の値を使用します。
*/
String locale() default "";
/**
* エラー時のメッセージを指定します。
* {@literal ${key}}の書式の場合、プロパティファイルから取得した値を指定できます。
* このメッセージは、文字列を日時型にパースする際に失敗したときに適用されるメッセージに使用します。
*
*
* - lineNumber : カラムの値に改行が含まれている場合を考慮した実際の行番号です。1から始まります。
* - rowNumber : CSVの行番号です。1から始まります。
* - columnNumber : CSVの列番号です。1から始まります。
* - label : カラムの見出し名です。
* - validatedValue : 実際のカラムの値です。
* - pattern : アノテーションの属性{@link #pattern()}の値です。指定されていない場合はデフォルトの値が設定されます。
*
*
* @return 省略した場合は、適用された{@link CellProcessor}に基づいたメッセージが出力されます。
*/
String message() default "{com.github.mygreen.supercsv.annotation.format.CsvDateTimeFormat.message}";
}