「2013-05-16T09:54:13」のような XMLGregorianCalendar 形式の日付があり、Java を使用して Oracle データベース テーブルに挿入するには、タイムスタンプ「MM/DD/YYYY hh:mm:ss AM」に変換する必要があります。
Javaでこれを行うにはどうすればよいですか?
より明確な答えは次のとおりです。
XMLGregorianCalendar インスタンスから Date のインスタンスを取得します。
Date date = xmlCalendar.toGregorianCalendar().getTime();
Convert XMLGregorianCalendar to Date in Java のコードを見つけました
その Date インスタンスを「MM/dd/yyyy hh:mm:ss a」という形式でフォーマットすると、MM/DD/YYYY hh:mm:ss AM 形式になります。
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
String formattedDate = formatter.format(date)
データベースを挿入するには、ダニエルが提案したことを行います
データベースに日付を挿入したい場合は、まずダニエルが提案したことを行います。
XMLGregorianCalendar xgc=<assume this is initialized>;
Date timestamp=xgc.toGregorianCalendar().getTime();
その後、PreparedStatement を介してミリ秒 (エポック時間) のタイムスタンプとして挿入します。そうすれば、精度を失うことはありません。
preparedStatement.setTimestamp(colNum,new Timestamp(timestamp.getTime()));
myPreparedStatement.setObject(
… ,
myXGC.toGregorianCalendar()
.toZonedDateTime()
) ;
Date
最新のアプローチでは、面倒な古いクラス、Calendar
、およびに取って代わった java.time クラスを使用しますGregorianCalendar
。
従来のクラスから java.time に変換します。
GregorianCalendar gc = myXGC.toGregorianCalendar() ;
ZonedDateTime zdt = gc.toZonedDateTime();
日時値を文字列ではなく日時オブジェクトとしてデータベースに渡します。
JDBC ドライバーが JDBC 4.2 以降に準拠している場合は、java.time 型を直接処理できます。
myPreparedStatement.setObject( … , zdt ) ;
ドライバーがまだ準拠していない場合は、一時的に java.sql 型に変換します。
myPreparedStatement.setTimestamp( … , java.sql.Timestamp.from ( zdt.toInstant() ) ) ;
以下の関数を使用してください - XMLGregorianCalendar インスタンスと必要な日付形式を渡すだけです (形式の例: "DD MMMM yyyy" -> 2017 年 1 月 1 日)
public String parseDate(String format,XMLGregorianCalendar XMLdate){
Date date = XMLdate.toGregorianCalendar().getTime();
DateFormat formatter = new SimpleDateFormat(format);
String formattedDate = formatter.format(date);
return formattedDate;
}