我无法在程序中处理不同格式的日期。
就像它现在一样,我的查询被执行,但我以YYYY-MM-DD格式从DB获取日期。 我希望它们是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对象中,我想我也搞砸了。
程序结束时没有显示列表中的内容(方法调用后的指令,正如您在此处的第二个代码引用中所示)。
答案 0 :(得分:2)
在不知道upperDate和lowerDate的值的情况下,很难理解为什么它们没有被正确解析。
查询的问题是$ diff --changed-group-format='%<' --unchanged-group-format='' file <(grep -A2 -B2 match file)
1
2
8
9
$ diff --changed-group-format='%<' --unchanged-group-format='' file2 <(grep -A2 -B2 match file2)
1
9
将日期输入中的java.sql.Date
值四舍五入,即重置时间部分。如果要使用时间部分查询和检索正确的结果,则必须使用java.util.Date
。尝试将java.sql.TimeStamp
和begin
类型更改为end
,将java.sql.TimeStamp
更改为rs.getDate(4), rs.getDate(5)
误解通常会开始,因为Oracle中的类型Date也包含时间部分,但在其他RDBMS中,日期类型代表&#34;只有&#34;日期