处理日期java.util,日期java.sql和SimpleDateFormat

时间:2015-05-28 15:21:45

标签: java oracle date jdbc

我无法在程序中处理不同格式的日期。

就像它现在一样,我的查询被执行,但我以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对象中,我想我也搞砸了。

程序结束时没有显示列表中的内容(方法调用后的指令,正如您在此处的第二个代码引用中所示)。

1 个答案:

答案 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.TimeStampbegin类型更改为end,将java.sql.TimeStamp更改为rs.getDate(4), rs.getDate(5)

误解通常会开始,因为Oracle中的类型Date也包含时间部分,但在其他RDBMS中,日期类型代表&#34;只有&#34;日期