-2

经过多次尝试后,我没有找到一种方法将取自 sql 的日期分配给LocalDate(“MM-dd-hh”)模式的变量。我已经定义了一个时间戳字段(从几年到几秒),我需要设置一个预注释小时、日和月。你有什么建议?

public class Prenot {

    private LocalDate date;

    private Date datesql;

    public Prenot(LocalDate date) {

        this.date = date;
    }


    public LocalDate getDate() {
        return this.date;

    }

    public void setDate(LocalDate date) {
        this.date = date;
    }





    public static void visualizePrenot(Connection con,
            ObservableList<Prenot> list) {
        try {
            Connessione connn = new Connessione();
            FXMLDocumentController prova = new FXMLDocumentController();
            connn.estabilishConn(prova.getUser(), prova.getPass());
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM prenotazione");

            while (rs.next()) {

                list.add(new Prenot(
rs.getDate("data").toLocalDate());

            }
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println(e);
        }

    }
}

编辑:我将代码重点放在需求上,现在你有什么建议,如果我放弃 java.sql.Date,从 mysql db 获取 TIMESTAMP 值?如果是这样,您认为最好在另一个不同的 getter 中获取日期和时间并在 TableView 中显示它们?

4

3 回答 3

2

ALocalDate是没有时间(小时)的日期。您可以将其视为年、月和月中的某天。如果您还需要存储小时数,可以想到两个选项:

  • 标准解决方案是将时间戳存储在数据库中并Instant在 Java 中使用。然后在需要将其显示InstantZonedDateTime某个时区的用户时将其转换为。
  • 或者,您可以LocalDateTime在 Java 中使用 a 。

在任何一种情况下,都不需要 ajava.sql.Datejava.sql.Timestamp。使用足够新的 JDBC 驱动程序(我认为来自 Connector/J 版本 5.1.37 左右),您可以直接将 a LocalDateLocalDateTimeInstantor存储ZonedDateTime到数据库中并再次将它们作为相同类型检索。如果你真的坚持使用过时的java.sql类型,你需要 aTimestamp因为 ajava.sql.Date也不能处理一天中的小时。

免责声明:这都是我读过的东西,而不是我在实践中尝试过的东西。

于 2017-06-29T18:51:32.070 回答
0

LocalDate不存储时间分量。

很可能您需要LocalDateTime,在这种情况下您可以尝试

LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000)

编辑:正如@Ole-vv 在下面的评论中指出的那样ofEpochSeconds需要另外两个参数,例如

LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000,0, ZoneOffet.UTC);
于 2017-06-29T08:42:36.323 回答
0
LocalDateTime now = LocalDateTime.now();

        System.out.println("Before : " + now);

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        String formatDateTime = now.format(formatter);

        System.out.println("After : " + formatDateTime);

希望有帮助!!!

于 2017-06-29T08:55:34.147 回答