我在使用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
我不知道为什么它没有给我正确的时间..
答案 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中。