Java 将(“月-日-小时”赋值给LocalDate变量

Java 将(“月-日-小时”赋值给LocalDate变量,java,mysql,localdate,Java,Mysql,Localdate,在多次尝试之后,我没有找到一种方法将从sql中获取的日期以(“MM dd hh”)的模式分配给LocalDate变量。我已经定义了一个时间戳字段(从年到秒),我需要设置一个预旋转小时、天和月。你有什么建议 public class Prenot { private LocalDate date; private Date datesql; public Prenot(LocalDate date) { this.date = date; }

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

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);
        }

    }
}
公共类Prenot{
私有本地日期;
私有日期SQL;
public Prenot(本地日期){
this.date=日期;
}
公共LocalDate getDate(){
返回此日期;
}
公共无效设置日期(LocalDate){
this.date=日期;
}
公共静态无效(连接控制,
可观察列表){
试一试{
Connessione connn=新Connessione();
FXMLDocumentController prova=新的FXMLDocumentController();
connn.estabilishConn(prova.getUser(),prova.getPass());
语句stmt=con.createStatement();
结果集rs=stmt.executeQuery(“从prenotazione中选择*);
while(rs.next()){
列表。添加(新Prenot)(
rs.getDate(“数据”).toLocalDate();
}
}捕获(SQLE异常){
e、 printStackTrace();
系统输出打印ln(e);
}
}
}
编辑:我把代码的重点放在需求上, 现在,如果我放弃java.sql.Date,从mysql数据库中获取时间戳值,您有什么建议?如果是这样,您认为将天和小时放入另一个不同的getter并在TableView中显示它们更好吗?

不存储时间组件

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

LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000)
EDIT:例如,
ofEpochSeconds
中的@Ole-v-v注释需要另外两个参数

LocalDateTime l = LocalDateTime.ofEpochSeconds(t.getTime() / 1000,0, ZoneOffet.UTC);

希望对您有所帮助!!!

A
LocalDate
是一个没有时间(小时)的日期。您可以将其视为年、月和月。如果您也需要存储小时,请考虑两个选项:

  • 标准的解决方案是在数据库中存储时间戳,并在Java中使用
    即时
    。然后,当需要在某个时区向用户显示时,将
    即时
    转换为
    分区日期时间
  • 或者,您可以在Java中使用
    LocalDateTime
在这两种情况下,都不需要
java.sql.Date
java.sql.Timestamp
。它具有足够新的JDBC驱动程序(我认为是从Connector/J版本5.1.37左右)您可以直接将
LocalDate
LocalDateTime
Instant
ZonedDateTime
存储到数据库中,然后再次以相同的类型检索它们。如果您真的坚持使用过时的
java.sql
类型,则需要
时间戳,因为
java.sql.Date
无法处理今天的乌尔也不例外


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

您到底遇到了什么问题?到目前为止您尝试了什么?以
MM dd hh
格式存储日期的字段的数据类型是什么?(a)什么是“prenotation”?(b)我们希望您尽量减少堆栈溢出的代码示例,以演示您的核心问题,而不是剪切和粘贴生产代码供我们浏览。请参阅。(c)日期时间对象包含数据/信息,而不是字符串,因此没有“格式”。已经讨论过数百(数千?)已在堆栈溢出上发布的现有问题和答案的个数。在发布之前,请彻底搜索此网站。对于处理整个类,我很抱歉,我想清楚代码。但是,我尝试了如下e getter:public LocalDate getDate(){很抱歉处理了整个类,我想弄清楚代码。但是,如果我放弃java.sql.Date,从mysql数据库中获取时间戳值,您有什么建议?如果是,您认为最好将时间戳值放入另一个不同的getter,days和hours,并在TableView中显示它们?(我承认更正,因此删除了我之前的评论。)
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);