SimpleDateFormat返回错误的时间值(00:00:00)

时间:2015-09-17 13:43:18

标签: java datetime simpledateformat

我在使用SimpleDateFormat组件时遇到了问题。

我有一个日期存储在我的数据库中作为DateTime,我想在我的应用程序中获取此日期时间的值。

我正在使用SimpleDateFormat来执行此操作,但问题是它始终将00:00:00作为时间返回给我。但是日期很好。

所以我做的如下:

private final static SimpleDateFormat ft = new SimpleDateFormat("dd.MM - HH:mm:ss");

public Push(int idp, String titrefr, String contenufr, String titreuk, String contenuuk, String pays, String marche, String type, Date datep, int isImportant, String  image) {

    super();

    this.idp = idp;
    this.titrefr = titrefr;
    this.contenufr= contenufr;
    this.titreuk = titreuk;
    this.contenuuk= contenuuk;
    this.pays = pays;
    this.marche = marche;
    this.type = type;
    this.datep = ft.format(datep);
    this.isImportant = isImportant;
    this.image = image;
    System.out.println(this.datep);
}

以下是我获取日期的方法:

Modele.java:

public List<Push> getPushfr() {
    String queryPushfr = "SELECT idp,titrefr,contenufr,titreuk,contenuuk,pays,marche,type,datep,isImportant, image FROM push WHERE datep > DATE_SUB(CURRENT_DATE, INTERVAL 3 MONTH) ORDER BY datep DESC;";
    try {
        connexion = ConnexionBDD.getConnexion();
        PreparedStatement pstmt = connexion.prepareStatement(queryPushfr);
        resultat = pstmt.executeQuery(queryPushfr);
        while (resultat.next()) {
            int idp = resultat.getInt("idp");
            String titrefr = resultat.getString("titrefr");
            String contenufr = resultat.getString("contenufr");
            String titreuk = resultat.getString("titreuk");
            String contenuuk = resultat.getString("contenuuk");
            String pays = resultat.getString("pays");
            String marche = resultat.getString("marche");
            String type = resultat.getString("type");
            Date datep = resultat.getDate("datep");
            int isImportant = resultat.getInt("isImportant");
            String image = resultat.getString("image");
            this.pushfr.add(
                    new Push(idp, titrefr, contenufr, titreuk, contenuuk, pays, marche, type, datep, isImportant,image));
        }
    } catch (Exception ex) {
        System.err.println(ex.getMessage());
    }
    return pushfr;
}

在我的数据库中,日期为:

2015-09-03 16:13:09

我从System.out.println(datep)获得的输出是

03.09 - 00:00:00

我不知道为什么它没有给我正确的时间..

2 个答案:

答案 0 :(得分:0)

如果要加载ResultSet的结果,请使用getTimestamp方法,而不是getDate。见JDBC ResultSet getDate losing precision

答案 1 :(得分:0)

如果您使用的是java.sql.Date,则会丢失有关时间的信息。

  

java.sql.Date对应于SQL DATE,这意味着它存储了多年,   月,日,小时,分钟,秒和毫秒   忽略。

将代码更改为:

public List<Push> getPushfr() {
    String queryPushfr = "SELECT idp,titrefr,contenufr,titreuk,contenuuk,pays,marche,type,datep,isImportant, image FROM push WHERE datep > DATE_SUB(CURRENT_DATE, INTERVAL 3 MONTH) ORDER BY datep DESC;";
    try {
        connexion = ConnexionBDD.getConnexion();
        PreparedStatement pstmt = connexion.prepareStatement(queryPushfr);
        resultat = pstmt.executeQuery(queryPushfr);
        while (resultat.next()) {
            int idp = resultat.getInt("idp");
            String titrefr = resultat.getString("titrefr");
            String contenufr = resultat.getString("contenufr");
            String titreuk = resultat.getString("titreuk");
            String contenuuk = resultat.getString("contenuuk");
            String pays = resultat.getString("pays");
            String marche = resultat.getString("marche");
            String type = resultat.getString("type");
            Date datep = resultat.getTimestamp("datep");
            int isImportant = resultat.getInt("isImportant");
            String image = resultat.getString("image");
            this.pushfr.add(
                    new Push(idp, titrefr, contenufr, titreuk, contenuuk, pays, marche, type, datep, isImportant,image));
        }
    } catch (Exception ex) {
        System.err.println(ex.getMessage());
    }
    return pushfr;
}

PD:我建议你将数据库中的TimeStamt存储在milisecons中。