Javaアプリケーションでは、日付時刻とタイムスタンプの組み合わせを使用してMySQLデータベースで日付情報を抽出および入力するという点で、どのような妥協点がありますか?
MySQL ドキュメント には、MySQLタイプのJavaタイプへのマッピングに関する情報があります。一般に、MySQL日時およびタイムスタンプの場合、Java.sql.Timestamp
。いくつかのリソースが含まれます:
http://dev.mysql.com/doc/refman/5.1/en/datetime.html
http://www.coderanch.com/t/304851/JDBC/Java/Java-date-MySQL-date-conversion
保存方法Java Date to Mysql datetime ...?
編集:
他の人が示したように、文字列の使用の提案は問題につながる可能性があります。
BalusCは問題についての良い説明をしましたが、ユーザーが自分で選択してテストできる良いエンドツーエンドのコードが欠けています。
ベストプラクティスは、常に日時をDBのUTCタイムゾーンに格納することです。 SQLタイムスタンプタイプにはタイムゾーン情報がありません。
日時値をSQL DBに書き込むとき
//Convert the time into UTC and build Timestamp object.
Timestamp ts = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC")));
//use setTimestamp on preparedstatement
preparedStatement.setTimestamp(1, ts);
DBからJavaに値を読み戻す場合、
次に、目的のタイムゾーンに変更します。ここでは、トロントのタイムゾーンに変更しています。
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
Timestamp timestamp = resultSet.getTimestamp(1);
ZonedDateTime timeInUTC = timestamp.toLocalDateTime().atZone(ZoneId.of("UTC"));
LocalDateTime timeInToronto = LocalDateTime.ofInstant(timeInUTC.toInstant(), ZoneId.of("America/Toronto"));