【问题标题】:Assign ("Months-days-hours") to a LocalDate variable将 ("Months-days-hours") 分配给 LocalDate 变量
【发布时间】:2017-06-29 07:03:51
【问题描述】:

经过多次尝试,我没有找到一种方法来将取自 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);
        }

    }
}

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

【问题讨论】:

  • 您到底遇到了什么问题?到目前为止,您尝试了什么?
  • MM-dd-hh 格式存储日期的字段的数据类型是什么?
  • (a) 什么是'prenotation'? (b) 您应该在 Stack Overflow 上最小化您的代码示例以展示您的核心问题,而不是剪切和粘贴生产代码让我们涉足。见Minimal, Complete, and Verifiable example (MCVE)。 (c) 日期时间对象包含数据/信息,而不是字符串,因此没有“格式”。已经在 Stack Overflow 上发布了数百个(数千个?)现有问题和答案。在发布之前彻底搜索此网站。
  • 抱歉应付整个班级,我想清楚代码。但是,我尝试了这样的 e getter: public LocalDate getDate(){
  • 抱歉应付整个班级,我想清楚代码。但是,如果我放弃 java.sql.Date,从 mysql 数据库获取 TIMESTAMP 值,你有什么建议?如果是这样,您认为最好在另一个不同的 getter 中获取日期和时间,然后在 TableView 中显示它们?

标签: java mysql localdate


【解决方案1】:

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

  • 标准解决方案是在数据库中存储一个时间戳,并在 Java 中使用 Instant。然后,当您需要在某个时区向用户显示时,将Instant 转换为ZonedDateTime
  • 您也可以在 Java 中使用 LocalDateTime

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

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

【讨论】:

    【解决方案2】:
    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);
    

    希望对你有帮助!!!

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • (我承认更正,因此删除了我之前的评论。)
      猜你喜欢
      • 2020-01-10
      • 2019-09-23
      • 2014-05-11
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多