Javaとmysqlの時間型の対応

MySQL (バージョン: 5.1.50) の時刻と日付の型は次のとおりです。

日時 8バイト xxxx-xx-xx xx:xx:xx 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
タイムスタンプ 4バイト xxxx-xx-xx xx:xx:xx 1970-01-01 00:00:01 ~ 2038
日付 3 バイト xxxx-xx-xx 1000-01-01 ~ 9999-12-31
年 1 バイト xxxx 1901 ~ 2155
時間 3 バイト xx:xx:xx -838:59:59 ~ 838:59:59 (時間の足し引きに対応するため)

 

 

Java (1.6)で時刻と日付の型を保存できるクラスは主に次のとおりです。

java.util.Date

java.util.Calendar

java.sql.Date

java.sql.Time

java.sql.タイムスタンプ

 

      以前に mysql からクエリされた時刻と日付の型は、java.util.Date型に配置されます。これは一連の問題を引き起こします。第一に、このクラスが提供する時間演算関数が少なすぎるため、通常、動作するにはjava.util.Calendarに変換する必要があります。第二に、たとえjava.util.Calendarが使用されていても、それは機能しません。非常に便利です。単純なアイデアを実現するには多くのコードを記述する必要がありますが、java.util.Dateのデータ内容は xxxx-xx-xx xx:xx:xxであり、時間が必要なく、日付だけが必要な場合もあります。データベースから取得した日付型をこのクラスに配置すると、時刻の位置に現在時刻が自動的に追加されます。これにより、データベース内では 2 つの日付は元々等しくなりますが、これらを取り出してこのクラスに配置すると等しくなくなります。時間誤差を考慮するのは頭の痛い問題です。

 

Java は、mysql と簡単に対話できるように 3 つのデータ型を提供します

java.sql.Date

java.sql.Time

java.sql.タイムスタンプ

これらはすべてjava.util.Date を継承しており、これはクラスを単純化したものとみなされ、データベースとの対話に非常に適しています。

 

===========データベースへの Java インジェクション ==========

java タイプ mysql タイプ 成功か否か
日付 日付 はい日付
時刻 いいえ日付タイムスタンプなし 日付 日時 いいえ日付いいえ 時刻 時刻 はい 時刻タイムスタンプ いいえ時刻 日付時刻 いいえ タイムスタンプ 日付 はい タイムスタンプ 時刻 はい タイムスタンプ タイムスタンプはいタイムスタンプ 日付時刻 はい======= === 












Java インジェクション データベースの終了========
一般規則、A が B を完全に含む場合、A は B にデータをインジェクトでき​​ます。そうでない場合はエラーが報告されます。


 

========== データベースから Java に抽出 ==========

mysql类型    java类型     成与否
date             date         yes
date             time         yes --------------缺少的部分使用历元
date           timestamp   yes --------------缺少的部分使用历元  

time           date           yes --------------缺少的部分使用历元
time           time           yes
time          timestamp    yes --------------缺少的部分使用历元

timestamp date           yes
timestamp time           yes
timestamp timestamp   yes

datetime      date         yes
datetime      time         yes
datetime    timestamp   yes
==========end
 从数据库提取到java=======
不会出错,缺少的部分使用历元,而不是当前日期时间

 

 

 

 

 


null to db(null) =====> 也是null  
null to db(not null)=======> 数据库报错
db(null) to java==========> 如果单字段出来,则整个entity都是null,如果带着其他不是null的字段出来,则可以实例化entity,本身字段依然是null
db(not null) to java==========> 如果包含日期,则报错,否则为000
最优解决方案,定义成可以为null

java.sql时间系统的运算系列

after,before
compareTo原小于参数返回<0,等于返回=0,大于返回>0

优点:于数据库同类型,可以方便传输(无论是从DB到src还是反方向),方便比较大小
缺点:缺少运算单元,不适合时间跳跃的运算和间隔的运算

总结:calendar具有强大的跳跃运算和间隔运算能力,在需要的时候,可以将sql系列的时间转成calendar。
先设置calendar为历元,然后从sql系列时间中转换,最后再转回sql系列时间。
calendar只用于时间有跳跃的转换,对比运算统一使用sql系统,这样代码将更清晰

 

 

 

 

日付とカレンダーを GMT に初期化する方法

new date(0)
Calendar.setTimeInMillis(0)


SQL シリーズの時間

静的 valueOf new XX(0) を使用してエポック新 XX(年 + 1900、月 + 1、日、時、分、秒を


取得)
、nano) は廃止され、作成されています

toString または SimpleDateFormat



記事のソース: http://blog.csdn.net/weinianjie1/article/details/6310770

おすすめ

転載: blog.csdn.net/zs520ct/article/details/78326130