Eh bien, j'ai un détail en utilisant un Date
, parce que je reçois un objet de ma base de données et dans la variable "fecha" (date) de ce même objet, je reçois un Java.sql.Timestamp
, donc le format est en millisecondes, mais je ne veux pas que les millisecondes apparaissent. J'ai donc besoin de formater la date que je reçois de ma base de données en une nouvelle date qui n'a pas de millisecondes.
C'est l'objet Factura:
public class Factura implements Java.io.Serializable {
private FacturaId id;
...
private boolean activo;
private Date fecha;
}
Dans le xml qui est mappé à la base de données, j'ai ce code pour cette variable "fecha":
<property name="fecha" type="timestamp">
<column length="19" name="fecha" not-null="true"/>
</property>
Dans la base de données, cette colonne est fecha DATETIME
.
Et quand je reçois un objet Factura
de ma base de données, je reçois ce genre de date 2013-10-10 10:49:29.0
mais je le veux sans le .0
(millisecondes).
J'ai essayé ceci (factura
est l'objet 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) {
...
}
Mais fechaNueva
me donne Thu Oct 10 10:49:29 CDT 2013
et je veux seulement 2013-10-10 10:49:29
, Pouvez-vous m'aider s'il vous plaît?
Merci beaucoup d'avance.
Vous n'avez pas du tout besoin d'utiliser de sous-chaîne car votre format
ne contient pas cette information.
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
La classe Java.sql.Timestamp n'a pas de format. Sa méthode toString génère une chaîne avec un format.
Ne confondez pas un objet date-heure avec une chaîne qui peut représenter sa valeur. Un objet date-heure peut analyser des chaînes et générer des chaînes mais n'est pas lui-même une chaîne.
Commencez par convertir les anciennes classes de date et heure héritées en difficulté en classes Java.time. Utilisez les nouvelles méthodes ajoutées aux anciennes classes.
Instant instant = mySqlDate.toInstant() ;
Perdez la fraction de seconde dont vous ne voulez pas.
instant = instant.truncatedTo( ChronoUnit.Seconds );
Attribuez le fuseau horaire à ajuster à partir de l'UTC utilisé par Instant.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z );
Générez une chaîne proche de la sortie souhaitée. Remplacez son T
au milieu par un ESPACE.
DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_DATE_TIME ;
String output = zdt.format( f ).replace( "T" , " " );