将 ("Months-days-hours") 分配给 LocalDate 变量
Assign ("Months-days-hours") to a LocalDate variable
经过多次尝试,我没有找到一种方法可以将 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 值,您有什么建议?如果是这样,您认为进入另一个不同的 getter 日期和时间并在 TableView 中显示它们更好?
LocalDate
不存储时间分量。
您很可能需要 LocalDateTime
,在这种情况下您可以尝试
LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000)
编辑:正如@Ole-v-v 在 中指出的那样,ofEpochSeconds
需要另外两个参数,例如
LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000,0, ZoneOffet.UTC);
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);
希望对您有所帮助!!!
A LocalDate
是没有时间(小时)的日期。您可以将其视为年月日。如果您也需要存储时间,可以想到两个选项:
- 标准的解决方案是在数据库中存储一个时间戳,并在Java中使用一个
Instant
。然后在需要向某个时区的用户显示时将 Instant
转换为 ZonedDateTime
。
- 或者您可以在 Java 中使用
LocalDateTime
。
在任何一种情况下都不需要 java.sql.Date
或 java.sql.Timestamp
。使用足够新的 JDBC 驱动程序(我认为来自 Connector/J 版本 5.1.37 左右),您可以直接存储 LocalDate
、LocalDateTime
、Instant
或ZonedDateTime
进入数据库并再次将它们检索为同一类型。如果你真的坚持使用过时的 java.sql
类型,你需要一个 Timestamp
因为 java.sql.Date
也不能处理一天中的小时。
免责声明:这都是我读过的东西,不是我在实践中尝试过的东西。
经过多次尝试,我没有找到一种方法可以将 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 值,您有什么建议?如果是这样,您认为进入另一个不同的 getter 日期和时间并在 TableView 中显示它们更好?
LocalDate
不存储时间分量。
您很可能需要 LocalDateTime
,在这种情况下您可以尝试
LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000)
编辑:正如@Ole-v-v 在ofEpochSeconds
需要另外两个参数,例如
LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000,0, ZoneOffet.UTC);
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);
希望对您有所帮助!!!
A LocalDate
是没有时间(小时)的日期。您可以将其视为年月日。如果您也需要存储时间,可以想到两个选项:
- 标准的解决方案是在数据库中存储一个时间戳,并在Java中使用一个
Instant
。然后在需要向某个时区的用户显示时将Instant
转换为ZonedDateTime
。 - 或者您可以在 Java 中使用
LocalDateTime
。
在任何一种情况下都不需要 java.sql.Date
或 java.sql.Timestamp
。使用足够新的 JDBC 驱动程序(我认为来自 Connector/J 版本 5.1.37 左右),您可以直接存储 LocalDate
、LocalDateTime
、Instant
或ZonedDateTime
进入数据库并再次将它们检索为同一类型。如果你真的坚持使用过时的 java.sql
类型,你需要一个 Timestamp
因为 java.sql.Date
也不能处理一天中的小时。
免责声明:这都是我读过的东西,不是我在实践中尝试过的东西。