好吧,我正在使用Date
有一个细节,因为我从我的数据库获取了一个对象,并且在来自同一对象的变量"fecha"(日期)中,我得到了一个java.sql.Timestamp
,所以格式是毫秒,但我不希望出现毫秒。因此,我需要将从数据库接收的日期格式化为没有毫秒的新日期。
这是对象 Factura:
public class Factura implements java.io.Serializable {
private FacturaId id;
...
private boolean activo;
private Date fecha;
}
在映射到数据库的 xml 中,我有该变量"fecha"的以下代码:
<property name="fecha" type="timestamp">
<column length="19" name="fecha" not-null="true"/>
</property>
在数据库中,该列fecha DATETIME
。
当我从数据库中获取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 方法生成一个具有格式的字符串。
不要将日期时间对象与可能表示其值的字符串混为一谈。日期时间对象可以分析字符串并生成字符串,但本身不是字符串。
java.time
首先从有问题的旧旧日期时间类转换为java.time类。使用添加到旧类的新方法。
Instant instant = mySqlDate.toInstant() ;
失去你不想要的几分之一秒。
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" , " " );