一、使用getTime方法进行转换
Java中Date类有一个方法getTime(),它可以返回自1970年1月1日00:00:00以来所经过的毫秒数。我们可以利用这个毫秒数来构造一个Timestamp对象。
Date date = new Date(); Timestamp timestamp = new Timestamp(date.getTime());
在上面的代码中,我们首先获取了当前时间的Date对象,然后传入getTime()方法获取毫秒数,最后用这个毫秒数构造一个Timestamp对象。这里要注意,Timestamp构造函数需要的时间戳是毫秒级别的。
如果需要将一个日期字符串转换为Timestamp对象,我们可以使用SimpleDateFormat类来解析字符串,然后再利用getTime()方法构造Timestamp对象。
String dateString = "2021-01-01 00:00:00"; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = dateFormat.parse(dateString); Timestamp timestamp = new Timestamp(date.getTime());
在上面的代码中,我们首先创建了一个日期字符串,然后定义了一个SimpleDateFormat对象来解析字符串。接着,使用parse()方法将字符串转换为Date对象,再利用getTime()方法构造Timestamp对象。
二、使用valueOf方法进行转换
除了使用getTime()方法,Java还提供了另外一种转换方式,那就是使用Timestamp类的静态方法valueOf()。这个方法接受一个字符串参数,返回对应的Timestamp对象。
String dateString = "2021-01-01 00:00:00"; Timestamp timestamp = Timestamp.valueOf(dateString);
在上面的代码中,我们直接将日期字符串传入valueOf()方法,就可以获取对应的Timestamp对象了。需要注意的是,这个方法只支持ISO格式的日期字符串,即"yyyy-MM-dd HH:mm:ss"。
三、使用toLocalDateTime方法进行转换
如果我们已经有一个Date对象或Timestamp对象,还可以通过toLocalDateTime()方法将其转换为LocalDateTime对象,再通过LocalDateTime对象构造新的Timestamp对象。
Date date = new Date(); LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); Timestamp timestamp = Timestamp.valueOf(localDateTime);
在上面的代码中,我们首先获取了当前时间的Date对象,然后通过toInstant()方法将其转换为Instant对象。接着,使用ofInstant()方法将Instant对象转换为LocalDateTime对象,最终通过valueOf()方法将LocalDateTime对象转换为Timestamp对象。
同样的,我们也可以通过toLocalDateTime()方法将一个Timestamp对象转换为LocalDateTime对象,然后构造新的Timestamp对象。
Timestamp timestamp = new Timestamp(System.currentTimeMillis()); LocalDateTime localDateTime = timestamp.toLocalDateTime(); Timestamp newTimestamp = Timestamp.valueOf(localDateTime);
在上面的代码中,我们首先创建了一个当前时间的Timestamp对象,然后通过toLocalDateTime()方法将其转换为LocalDateTime对象。接着,使用valueOf()方法将LocalDateTime对象转换为Timestamp对象。
四、使用Instant代替Date进行转换
Java 8中引入了Instant类,它可以更加精确地表示一个时间点,包含纳秒和秒的级别。如果我们需要将一个日期字符串或Timestamp对象转换为Timestamp对象,最好的方法是先将其转换为Instant对象,再利用toEpochMilli()方法获取毫秒数构造Timestamp对象。这样可以确保精度最高。
String dateString = "2021-01-01 00:00:00.123456789"; Instant instant = Instant.parse(dateString); Timestamp timestamp = new Timestamp(instant.toEpochMilli());
在上面的代码中,我们首先创建了一个日期字符串,并使用Instant类的parse()方法将其转换为Instant对象。接着,使用toEpochMilli()方法获取毫秒数,最后用这个毫秒数构造一个Timestamp对象。
同样的,我们也可以将一个Date对象或Timestamp对象转换为Instant对象,然后再利用toEpochMilli()方法获取毫秒数构造Timestamp对象。
Timestamp timestamp = new Timestamp(System.currentTimeMillis()); Instant instant = timestamp.toInstant(); Timestamp newTimestamp = new Timestamp(instant.toEpochMilli());
在上面的代码中,我们首先获取了当前时间的Timestamp对象,然后通过toInstant()方法将其转换为Instant对象。接着,使用toEpochMilli()方法获取毫秒数,最终用这个毫秒数构造新的Timestamp对象。
五、总结
本文详细介绍了Java Date转换为Timestamp的几种方法和技巧。其中包括使用getTime()方法、valueOf()方法、toLocalDateTime()方法和Instant类。无论是从Date对象还是Timestamp对象转换,无论是从日期字符串还是已有的时间对象转换,都有相应的转换方式。需要注意的是,不同的转换方式可能在精度上存在差别,请根据实际场景进行选择。