web-dev-qa-db-ja.com

Java.sql.Timestamp(yyyy-MM-dd HH:mm:ss.S)を日付(yyyy-MM-dd HH:mm:ss)にフォーマットする方法

まあ、私はDateを使用して詳細を持っています、なぜならデータベースからオブジェクトを取得し、その同じオブジェクトから変数「fecha」(日付)にJava.sql.Timestampので、フォーマットにはミリ秒がありますが、ミリ秒を表示したくありません。だから、私は私のDBから受け取っている日付をミリ秒のない新しい日付にフォーマットする必要があります。

これはオブジェクトFacturaです:

public class Factura  implements Java.io.Serializable {

 private FacturaId id;
 ...
 private boolean activo;
 private Date fecha;
}

DBにマップされるxmlには、その変数「fecha」の次のコードがあります。

<property name="fecha" type="timestamp">
  <column length="19" name="fecha" not-null="true"/>
</property>

データベースでは、その列はfecha DATETIME

DBからオブジェクトFacturaを取得すると、この種の日付2013-10-10 10:49:29.0しかし、私は.0(ミリ秒)。

私はこれを試しました(facturaFacturaオブジェクトです):

try {
   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   Date fechaNueva = null;
   String fechaStr = factura.getFecha().toString();
   int tamaño = fechaStr.length()-2;
   fechaStr = fechaStr.substring(0, tamaño); //I get a string without the miliseconds
   fechaNueva = format.parse(fechaStr);
} catch(ParseException ex) {
   ...
}

しかし、fechaNuevaは私にThu Oct 10 10:49:29 CDT 2013そして私は2013-10-10 10:49:29、助けてくれませんか?

事前に感謝します。

8
user2284257

formatはその情報を保持していないため、部分文字列を使用する必要はまったくありません。

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String fechaStr = "2013-10-10 10:49:29.10000";  
Date fechaNueva = format.parse(fechaStr);

System.out.println(format.format(fechaNueva)); // Prints 2013-10-10 10:49:29
16
Sajal Dutta

日時オブジェクトは文字列ではありません

Java.sql.Timestampクラスには形式がありません。そのtoStringメソッドgenerates形式の文字列。

日付時刻オブジェクトを、その値を表す可能性のある文字列と混同しないでください。日時オブジェクトは文字列を解析して文字列を生成できますが、それ自体は文字列ではありません。

Java.time

最初に、問題のある古いレガシー日時クラスからJava.timeクラスに変換します。古いクラスに追加された新しいメソッドを使用します。

Instant instant = mySqlDate.toInstant() ;

不要な1秒未満を失います。

instant = instant.truncatedTo( ChronoUnit.Seconds );

インスタントが使用するUTCから調整するタイムゾーンを割り当てます。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z );

目的の出力に近い文字列を生成します。中央のTをスペースに置き換えます。

DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_DATE_TIME ;
String output = zdt.format( f ).replace( "T" , " " );
3
Basil Bourque