Home > Blockchain >  Convert a query’s date return with SimpleDateFormat
Convert a query’s date return with SimpleDateFormat

Time:06-21

I'm trying to convert a resultset from ddMMyyyy HH:mm:ss (ex: 19/06/2022 00:00:10) to yyyyMMddHHmmss (should be 20220619000010) with SimpleDateFormate without success. This is how I'm doing:

  1. I have an Util class, which has the follow class:
      public class Utils {
      public static String Format(String formato, Date date) {
        date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String dataString = sdf.format(date);
        return dataString;
    }
 }

And I also have a ResultSet class witch return the objects of my query based in another class. Example:

Class one:

public class MyFile {
String Date = new String ();

  getter and setter
}

Class 2 (create the line of my document):

public static MyFile createRow (ResultSet rs) throws SQLException {
MyFile mf = new MyFile();
mf.setDate(Utils.Format(rs.getString("Date");
return mf;
}

The point is: This conversion doesn't work and I can't find another way to do this. Someone could help me, please?

The java message:

"The method Format(String, Date) in te type Utils is not applicable for the arguments (String)
3 quick fixes available:
  add argument to match 'Format(String, Date)'
- Change method 'Format(String, Date)': Remove parameter 'Date'
º Create method 'Format(String) in type 'Utils'"

CodePudding user response:

For the conversion, you'll need two SimpleDateFormats; one for parsing the string to date, another to turn the date to the desired format:

public static String Format(String formato, Date date) {
     SimpleDateFormat inputFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
     try {
         date = new inputFormat.parse(formato);
     } catch (ParseException ex) {
         // wrong format?
     }
     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
     String dataString = sdf.format(date);
     return dataString;
}

// usage

mf.setDate(Utils.Format(rs.getString("Date"), new Date()));

I presume your date parameter would be a default Date in case the formato input string is invalid.

CodePudding user response:

First of all, I want to tell you that there are newer and more convenient libraries than the old java.util.Date library. I am not so experienced with the new ones, but mostly java.util.time (like here: Understanding Java util Date) or joda.time are recommended.

So maybe you want to consider using one of the newer library instead of the old SimpleDateFormat from java.util.Date, if you only just began coding with Dates and just picked the first library coming to your mind, I think it could be a good idea.

To your specific problem: The java error message just tells you how it is, in your utils class you have your String Format with the constructor with two input params, a String and a date. In this line:

mf.setDate(Utils.Format(rs.getString("Date");

you are calling your Utils.Format String, but you are only passing one argument, "rs.getString("Date")". So either you refactor your String Format Constructor to only take a string as an argument or you pass (like recommended in the java message) a string and a date, for instance like:

mf.setDate(Utils.Format(rs.getString("Date"), new Date();

While I'm writing this, I think in this line two closing brackets are missing. You should add them.

But I think it should not be that complicated to convert a String like 19/06/2022 00:00:10 into another format using SimpleDateFormat. All you need to do is

String sDate1="19/06/2022 00:00:10";
SimpleDateFormat formatter1=new SimpleDateFormat("yyyyMMddHHmmss"); 
Date date1=formatter1.parse(sDate1); 

This way, in date1 should be your DateString in the Format you specified when initialising your SimpleDateFormat formatter1. Here is the official doc to SimpleDateFormat: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  •  Tags:  
  • java
  • Related