经过多次尝试后,我没有找到一种方法将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数据库中获取TIMESTAMP值,你有什么建议?如果是这样的话,你觉得它更好,进入另一个不同的吸气剂,几天和几小时,并在TableView中显示它们?
答案 0 :(得分:2)
LocalDate
是没有时间(小时)的日期。您可以将其视为月份,月份和日期。如果您还需要存储时间,我会想到两个选项:
Instant
。然后,当您需要在某个时区将其显示给用户时,将Instant
转换为ZonedDateTime
。LocalDateTime
。在任何一种情况下,都不需要java.sql.Date
或java.sql.Timestamp
。使用足够新的JDBC驱动程序(我认为来自Connector / J版本5.1.37左右),您可以直接将LocalDate
,LocalDateTime
,Instant
或ZonedDateTime
存储到数据库并再次将它们检索为相同的类型。如果您确实坚持使用过时的java.sql
类型,则需要Timestamp
,因为java.sql.Date
无法处理一天中的小时。
免责声明:这些都是我读过的,而不是我在实践中尝试过的。
答案 1 :(得分:0)
LocalDate
不存储时间组件。
您很可能需要LocalDateTime
,在这种情况下您可以尝试
LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000)
编辑:正如comment below中的@ Ole-v-v注释,ofEpochSeconds
需要两个参数,例如
LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000,0, ZoneOffet.UTC);
答案 2 :(得分: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);
希望有所帮助!!!