2016-05-09 7 views
0

year値のみをデータベースに保存して取得します。日付を保存する

この私のドメインである(POJO

@Entity 
public class Publisher { 

public Publisher(..., Date establishDate) { 
    //assign other variables 
    this.setEstablishDate(establishDate); 
} 

    @NotNull 
    private Date establishDate; 
... 
} 

そして、ここでは私のDTOである:ここでは

@NotNull 
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy") 
private Long establish_date; 

、私は新しい出版社を作成しています:

new Publisher(..., new Date(this.establish_date)); 

を私が送っjsonの値が1370の場合はestablish_date(新規パブリッシャの場合)ですが、Daそれは次のように表示されます:1970-01-01 03:30:01

なぜですか?

Publisherを取得すると、establish_date1000と表示されます。

どうしたのですか?

+2

年だけ気になる人は、なぜ「日付」フィールドを使っているのですか?なぜ 'int'を使わないのですか? 'new Date(1370)'は、Unixエポック後の1370ミリ秒の値、つまり1970-01-01T00:00:01.370Zを作成することに注意してください。 (あなたのシステムのタイムゾーンがどこかに適用されているように見えます...)私の推測は、それはあなたが期待したものではないということです。 'establish_date'を取得すると、サブ秒の情報が切り捨てられていることがわかります。これは実現可能です。さて、あなたは1370が何を意味すると思いましたか? –

+0

@JonSkeet「1370」は、イラン国民の年の法的価値です。 –

+1

しかし、それは 'Date(long)'コンストラクタがしないものです。基本的に、あなたは 'Date'を全く使ってはいけないとはっきりしていませんが、確かにUnixの時代から何ミリ秒も待っているコンストラクタの引数として年を表すための値を渡すべきではありません。 –

答えて

1

間違ったコンストラクタを使用しています。引数は、1970年以降のミリ秒を指定します。Date(long)正しいコンストラクタを使用できます。Date(int, int, int)

Date APIのほとんどは非推奨です。 CalendarDateTimeのような良い選択肢があります。年だけを格納しているので、平方整数も使用できます。これははるかに簡単になります。

+0

'int'ではなく' Date'として保存する必要があります。 'year'だけを' DateTime'でどのように保存することができますか? 私の年はグレゴリオ暦ではありません。 –

+0

年自体は単一の時点ではなく、したがって非常にあいまいです。複雑な計算や変換の場合は、少なくとも日と月が欠けています。だから、私は 'int'があなたにはうってつけだと思います。 オブジェクトを使用する場合は、LocalDateを参照する必要があります。https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#of-int-int-int- 。あなたがこれを何とか使いたいのなら、あなたは日と月を作ります: 'LocalDate.of(1370,1,1)'。しかしこれは非常に間違っています;) –

関連する問題