まあ、私は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
(ミリ秒)。
私はこれを試しました(factura
はFactura
オブジェクトです):
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
、助けてくれませんか?
事前に感謝します。
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
Java.sql.Timestampクラスには形式がありません。そのtoStringメソッドgenerates形式の文字列。
日付時刻オブジェクトを、その値を表す可能性のある文字列と混同しないでください。日時オブジェクトは文字列を解析して文字列を生成できますが、それ自体は文字列ではありません。
最初に、問題のある古いレガシー日時クラスから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" , " " );