34

「2013-05-16T09:54:13」のような XMLGregorianCalendar 形式の日付があり、Java を使用して Oracle データベース テーブルに挿入するには、タイムスタンプ「MM/DD/YYYY hh:mm:ss AM」に変換する必要があります。

Javaでこれを行うにはどうすればよいですか?

4

8 に答える 8

9

より明確な答えは次のとおりです。

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)

Javaでの日付から文字列への変換から

データベースを挿入するには、ダニエルが提案したことを行います

于 2016-12-19T11:07:30.550 に答える
3

データベースに日付を挿入したい場合は、まずダニエルが提案したことを行います。

XMLGregorianCalendar xgc=<assume this is initialized>;
Date timestamp=xgc.toGregorianCalendar().getTime();

その後、PreparedStatement を介してミリ秒 (エポック時間) のタイムスタンプとして挿入します。そうすれば、精度を失うことはありません。

preparedStatement.setTimestamp(colNum,new Timestamp(timestamp.getTime()));
于 2014-12-03T04:51:38.787 に答える
1

tl;dr

myPreparedStatement.setObject( 
    … , 
    myXGC.toGregorianCalendar()
         .toZonedDateTime()
) ;

java.time

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() ) ) ;
于 2017-06-21T15:47:30.923 に答える
0

以下の関数を使用してください - 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;
}
于 2017-06-21T15:13:41.137 に答える