gpt4 book ai didi

java - 处理日期 java.util、日期 java.sql 和 SimpleDateFormat

转载 作者:行者123 更新时间:2023-12-02 03:01:11 25 4
gpt4 key购买 nike

我在程序中处理不同格式的日期时遇到困难。

现在,我的查询已执行,但我从数据库中以 YYYY-MM-DD 格式获取日期。我希望它们采用 DD-MM-YYYY HH:mm 格式。

在 SQL 文件中,日期的定义如下(在 INSERT INTO 指令中):

to_date('2015/05/15 12:00', 'yyyy/mm/dd hh24:mi') 

在我的java代码中,我尝试让用户选择一个日期(Date对象是java.util.date):

DateFormat formater = new SimpleDateFormat("DD-MM-YYYY HH:mm", Locale.FRENCH);
String dateString;
dateString = sc.nextLine();
Date upperDate = formater.parse(dateString);
// a "lowerDate is also that way.

List<Train> listTrains = new ArrayList<>();
listTrains = manager.WhenTrain(departure_city, arrival_city, upperDate, lowerDate);

for(int i = 0; i<liste.size(); i++)
{
System.out.println(listTrains.get(i));
}

在一个方法中,我尝试获取与各种条件相对应的值,其中包括日期,所以我有:

在构造函数和字段中:

    private PreparedStatement AllTrains;
private PreparedStatement LookForDepartureStation;

AllTrains = connection.prepareStatement("SELECT * FROM Trains"
+ "WHERE departure = ? AND arrival = ? AND departurehour BETWEEN ? AND ?"); // Trains is a view, joining several table
LookForDepartureStation = connection.prepareStatement("SELECT * from Journey where departure = ?");

另一种方法:

    public List<Train> WhenTrain(String departureStation, String arrivalStation, java.util.Date dateBefore, java.util.Date dateAfter) {

ArrayList<Train> TrainList= new ArrayList<>();

try {


java.sql.Date begin = new java.sql.Date(dateBefore.getTime());
java.sql.Date end = new java.sql.Date(dateAfter.getTime());


LookForDepartureStation.setString(1, departureStation);
ResultSet test1 = LookForDepartureStation.executeQuery();

if(test1.next()){

LookForDepartureStation.close();
LookForArrivalStation.setString(1, arrivalStation);
ResultSet test2 = LookForArrivalStation.executeQuery();

if(test2.next()) {
LookForArrivalStation.close();

AllTrains.setString(1, departureStation);
AllTrains.setString(2, arrivalStation);
AllTrains.setDate(3, begin);
AllTrains.setDate(4, end);

ResultSet rs = AllTrains.executeQuery();

while(rs.next()){
TrainList.add(new Train(rs.getInt(1),

rs.getString(2), rs.getString(3), rs.getDate(4), rs.getDate(5)));
// Train is an object to take all those.
// AllTrains contains TrainID (an oracle integer), departure (varchar2), arrival (varchar2), departurehour (sql oracle DATE), arrivalhour (sql oracle DATE)


}
// AllTrains.close();
return ListeTrains;
}
else {
System.out.println("wrong input on arrival station");
// AllTrains.close();
TrainApp.Alltrains(this);
return TrainList;
}
}
else {
System.out.println("wrong input on departure station");

return TrainList;
}

} catch (SQLException error) {
error.printStackTrace();

return TrainList;
}
catch(NullPointerException e) {
System.out.println("Station not found");
e.printStackTrace();
TrainApp.Alltrains(this); // calling back static method to try again the input.
return TrainList;
}

}

当我尝试在方法中传递 Upperdate 时,调试器显示该变量包含:“1 janv.0003 00:00:00”(实际上我尝试使用 03-11-1993)。此外,我认为它不会将我想要的日期放入 Train 对象中,我想我也搞砸了。

程序结束时没有显示列表中的内容(方法调用后的说明,如您在此处的第二个代码引用中看到的那样)。

最佳答案

如果不知道 upperDate 和 lowerDate 的值,就很难理解为什么它们没有被正确解析。

查询的问题在于 java.sql.Date 将输入中的 java.util.Date 值四舍五入为日期,即它重置了时间部分。如果您想查询并检索包含时间部分的正确结果,则必须使用 java.sql.TimeStamp。尝试将 beginend 类型更改为 java.sql.TimeStamprs.getDate(4)、rs.getDate(5) rs.getTimestamp(4)、rs.getTimestamp(5)

这种误解通常是因为 Oracle 中的 Date 类型还包含时间部分,但在其他 RDBMS 中,日期类型“仅”代表日期

关于java - 处理日期 java.util、日期 java.sql 和 SimpleDateFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30510742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com