Four Stars

Calendar cannot be resolved to a type

Hi

I try to convert a date with timezone information into a simple date UTC. 

The source Date for example is: "2017-05-12T10:15:22+02:00"

The target date with subtraction of the time zone information would be "12/05/2017 08:15:22"

It works already for one of may jobs but unfortunately not for the others.

I also wonder if there is a simpler way.

 

The error message is:

- Calendar cannot be resolved to a type
- GregorianCalendar cannot be resolved to a type

 

The code is:

// declare and init variables and data structures
String datetime = "";
String d = "";
String t = ""; 
String add = "";
String year = ""; 
String month = ""; 
String day = ""; 
String finDate = "";
int a; 
Date myDateTime = null;
String myString = ""; 
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Calendar cal = new GregorianCalendar();
HashMap<String, String> hm = new HashMap<String, String>();


// put values in hash map
hm.put("NUMStartDate", input_row._NUMStartDate_);
hm.put("NUMEndDate", input_row._NUMEndDate_);
hm.put("PublicationTimeStamp", input_row._PublicationTimeStamp_);
hm.put("ModificationTimeStamp", input_row._ModificationTimeStamp_);
hm.put("TimeStamp", input_row._TimeStamp_);

// iterate over values in hash map and extract date and time
Set set = hm.entrySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()){
 	Map.Entry mentry = (Map.Entry)iterator.next();
	datetime = mentry.getValue() + "";
   switch (datetime) { 
      	case "null": 
      		datetime = "9999-01-01T00:00:00+00:00";
      	}
      d = datetime.substring(0, 10) + "";
      t = datetime.substring(11, datetime.length()-9);
      add = datetime.substring(19, datetime.length()-3);
      a = Integer.parseInt(add);
      myString =  d + " " + t;
      try
      {
            myDateTime = simpleDateFormat.parse(myString);
      }
      catch (ParseException e)
      {
            e.printStackTrace();
      }
      cal.setTime(myDateTime);
      // subtract hours to date
      cal.add(Calendar.HOUR_OF_DAY, - a);
      Date date = cal.getTime();

      datetime = simpleDateFormat.format( date );
      d = datetime.substring(0, 10) + "";
      t = datetime.substring(11, datetime.length());
      year = datetime.substring(0, 4);
	  month = datetime.substring(5, 7);
	  day = datetime.substring(8, 10);

    finDate =  day + "/" + month + "/" + year + " " + t;

    //System.out.println("Key: " + mentry.getKey() + " " + finDate + "");

		switch (mentry.getKey() + "") {
      	case "NUMStartDate":
      		output_row._NUMStartDate_ = finDate;
      	case "NUMEndDate":
      		output_row._NUMEndDate_ = finDate;
      	case "PublicationTimeStamp":
      		output_row._PublicationTimeStamp_ = finDate;
      	case "ModificationTimeStamp":
      		output_row._ModificationTimeStamp_ = finDate;
      	case "TimeStamp":
      		output_row._TimeStamp_ = finDate;
      	      		
    }

}

 

1 ACCEPTED SOLUTION

Accepted Solutions
Forteen Stars

Re: Calendar cannot be resolved to a type

That is a lot of code to format a date. This works and is a little less work....

String source = "2017-05-12T10:15:22+02:00";
source = source.substring(0, source.lastIndexOf(':'))+source.substring(source.lastIndexOf(':')+1);
System.out.println(source);
Date now = routines.TalendDate.parseDateInUTC("yyyy-MM-dd'T'HH:mm:ssZ", source, true);
System.out.println(routines.TalendDate.formatDateInUTC("dd/MM/yyyy HH:mm:ss", now));

The +02:00 causes an issue as it should be +0200 without the ":". Remove this and the code you need is already provided by Talend.

 

Your code is causing the error this post is about due to this line....

Calendar cal = new GregorianCalendar();

You can fix it with this....

java.util.Calendar cal = new java.util.GregorianCalendar();

....but I suspect you will get more errors regarding HashMap, Map, Set, etc...

Rilhia Solutions
2 REPLIES
Forteen Stars

Re: Calendar cannot be resolved to a type

That is a lot of code to format a date. This works and is a little less work....

String source = "2017-05-12T10:15:22+02:00";
source = source.substring(0, source.lastIndexOf(':'))+source.substring(source.lastIndexOf(':')+1);
System.out.println(source);
Date now = routines.TalendDate.parseDateInUTC("yyyy-MM-dd'T'HH:mm:ssZ", source, true);
System.out.println(routines.TalendDate.formatDateInUTC("dd/MM/yyyy HH:mm:ss", now));

The +02:00 causes an issue as it should be +0200 without the ":". Remove this and the code you need is already provided by Talend.

 

Your code is causing the error this post is about due to this line....

Calendar cal = new GregorianCalendar();

You can fix it with this....

java.util.Calendar cal = new java.util.GregorianCalendar();

....but I suspect you will get more errors regarding HashMap, Map, Set, etc...

Rilhia Solutions
Four Stars

Re: Calendar cannot be resolved to a type

Great, thanks for your quick answer, it works.