将LocalDateTime转换为Timestamp格式

12 浏览
0 Comments

将LocalDateTime转换为Timestamp格式

我将不同格式的日期时间字符串转换为Timestamp(java.sql)格式。我已经根据不同格式将其转换为了LocalDateTime。有没有办法将LocalDateTime对象转换为Timestamp?

0
0 Comments

问题:将LocalDateTime转换为Timestamp格式的出现原因是什么?解决方法是什么?

原因:

- 你可能需要将LocalDateTime存储到SQL数据库的timestamp类型列中。

- 标准的SQL timestamp数据类型并不能准确地定义一个时间点,它只定义了日期和时间,允许在任何时区进行解释。

- 在Java中,如果要存储到timestamp类型列,则需要使用OffsetDateTime。

解决方法:

1. 如果需要存储到带有时区的timestamp列中,使用OffsetDateTime:

final ZoneId zone = ZoneId.of("Asia/Tehran");
LocalDateTime ldt = LocalDateTime.of(2019, 2, 25, 23, 45);
OffsetDateTime odt = ldt.atZone(zone).toOffsetDateTime();
System.out.println("As OffsetDateTime: " + odt);
PreparedStatement ps = yourDatabaseConnection.prepareStatement(
    "insert into your_table(your_ts_with_timezone) values (?)");
ps.setObject(1, odt);
ps.executeUpdate();

2. 如果需要存储到不带时区的timestamp列中,直接使用LocalDateTime:

PreparedStatement ps = yourDatabaseConnection.prepareStatement(
    "insert into your_table(your_ts_without_timezone) values (?)");
ps.setObject(1, ldt);

3. 如果需要将LocalDateTime转换为旧版的java.sql.Timestamp对象:

Timestamp ts = Timestamp.valueOf(ldt);
System.out.println("As old-fashioned Timestamp: " + ts);

注意:这种转换使用了JVM的默认时区,如果程序在JVM中运行时更改了默认时区设置,则结果可能不准确。为了控制转换时使用的时区,可以使用Instant:

Instant i = ldt.atZone(zone).toInstant();
Timestamp ts = Timestamp.from(i);

以上就是将LocalDateTime转换为Timestamp格式的出现原因以及解决方法。

0
0 Comments

在使用Java 8的内置类进行测试时,我们尝试将LocalDateTime转换为Timestamp格式。以下是测试代码:

public class Test {
    public static void main(String[] args) {
        Timestamp timestamp = Timestamp.valueOf(LocalDateTime.now());
        // java timestamp class
        System.out.println(timestamp);
        // miliseconds 
        System.out.println(timestamp.getTime());
    }
}

这段代码的目的是将当前的LocalDateTime对象转换为Timestamp对象,并输出结果。然而,运行代码后可能会遇到一些问题。

问题的原因可能是由于LocalDateTime和Timestamp之间的类型不匹配。LocalDateTime表示日期和时间,而Timestamp表示特定的时间点。因此,我们需要将LocalDateTime转换为Timestamp以便正确地表示时间点。

为了解决这个问题,我们可以使用Timestamp类的valueOf()方法将LocalDateTime对象转换为Timestamp对象。这个方法接受一个LocalDateTime参数,并返回对应的Timestamp对象。

在上面的代码中,我们使用了LocalDateTime.now()方法获取当前的日期和时间,并将其传递给Timestamp.valueOf()方法进行转换。然后,我们通过调用Timestamp对象的getTime()方法获取转换后的时间戳的毫秒数。

通过这种方式,我们可以将LocalDateTime对象转换为Timestamp对象,并正确地表示时间点。

0