Fórum

Date Format Issue

anand gopalan, modificado 10 Anos atrás.

Date Format Issue

Expert Postagens: 442 Data de Entrada: 02/03/12 Postagens Recentes
Hi,

I declared date filed in view.jsp and get the date in action class i am getting java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date. How to fix this issue. Please see the below code.

View.sjp
<td><liferay-ui:input-date formName="t02Traveldate" yearRangeStart="1970"
yearRangeEnd="2100" yearValue="2013" monthValue="4" dayValue="9"
dayParam="d1" monthParam="m1" yearParam="y1" />
</td>

Oracle Database Table:
Name Type
-------------- -------------

T02TRAVELDATE DATE

TravelDetails.java

public class TravelDetails extends MVCPortlet {

//handle TravelDate
System.out.println("Day: "+ParamUtil.getString(actionRequest,"d1"));
System.out.println("Month: "+ParamUtil.getString(actionRequest,"m1"));
System.out.println("Year: "+ParamUtil.getString(actionRequest,"y1"));

String date= ParamUtil.getString(actionRequest,"d1")+"/"+ParamUtil.getString(actionRequest,"m1") +"/"+ParamUtil.getString(actionRequest,"y1");
SimpleDateFormat formatter1 = new SimpleDateFormat("dd/MM/yyyy");
java.sql.Date t02Traveldate = null;
try {
System.out.println("inside try date");
t02Traveldate = (Date) formatter1.parse(date); I am getting error this line: error: java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date at com.test.TravelDetails.processAction(TravelDetails.java:62)-

System.out.println("inside after try");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
....
...
EMP_TRAVEL_DETAILSLocalServiceUtil.add(t02Tranid,t02Emplid,t02Ename,t02Vechiletype, t02Vechileno, t02Email, t02Approver, t02Travelfrom, t02Travelto, t02Traveldate,t02Landmark,t02Totalkm, t02Status,t02Applydate,t02Apprdate);
}

EMP_TRAVEL_DETAILSLocalServiceUtil.java

public static void add(int t02Tranid, java.lang.String t02Emplid,
java.lang.String t02Ename, java.lang.String t02Vechiletype,
java.lang.String t02Vechileno, java.lang.String t02Email,
java.lang.String t02Approver, java.lang.String t02Travelfrom,
java.lang.String t02Travelto, java.sql.Date t02Traveldate,
java.lang.String t02Landmark, int t02Totalkm,
java.lang.String t02Status, java.sql.Date t02Appydate,
java.sql.Date t02Apprdate) {
getService()
.add(t02Tranid, t02Emplid, t02Ename, t02Vechiletype, t02Vechileno,
t02Email, t02Approver, t02Travelfrom, t02Travelto, t02Traveldate,
t02Landmark, t02Totalkm, t02Status, t02Appydate, t02Apprdate);
}

Service.xml

<!-- Audit fields -->

<column name="t02Tranid" type="int"></column>
<column name="t02Ename" type="String"></column>
<column name="t02Vechiletype" type="String"></column>
<column name="t02Vechileno" type="String"></column>
<column name="t02Email" type="String"></column>
<column name="t02Approver" type="String"></column>
<column name="t02Travelfrom" type="String"></column>
<column name="t02Travelto" type="String"></column>
<column name="t02Traveldate" type="Date"></column>
<column name="t02Landmark" type="String"></column>
<column name="t02Totalkm" type="int"></column>
<column name="t02Status" type="String"></column>
<column name="t02Appydate" type="Date"></column>
<column name="t02Apprdate" type="Date"></column>
thumbnail
Tejas patel, modificado 10 Anos atrás.

RE: Date Format Issue

Junior Member Postagens: 71 Data de Entrada: 24/01/12 Postagens Recentes
Hi anand,

you can try below to get the <liferay-ui:input-date> parameters


        int month = ParamUtil.getInteger(renderRequest, "m1");

        int day = ParamUtil.getInteger(renderRequest, "d1");

        int year = ParamUtil.getInteger(renderRequest, "y1");


then convert it in to date as below it return date object


Date date=PortalUtil.getDate(month, day, year);


Now you can parse date in any format as below


public String getFormattedDate(final Date date)
    {
        String formattedDate = null;
        if (Validator.isNotNull(date))
        {
            SimpleDateFormat inputFormat = new SimpleDateFormat("dd/MM/yyyy");
            formattedDate = inputFormat.format(date);
        }
        return formattedDate;
    }


Regards,
Tejas patel
anand gopalan, modificado 10 Anos atrás.

RE: Date Format Issue

Expert Postagens: 442 Data de Entrada: 02/03/12 Postagens Recentes
Hi Tejas,

I am getting same error.
thumbnail
Tejas patel, modificado 10 Anos atrás.

RE: Date Format Issue

Junior Member Postagens: 71 Data de Entrada: 24/01/12 Postagens Recentes
Hi anand,

As said by "Murali Karteek", it is correct that It's not possible to cast from java.util.Date to java.sql.Date.

So you have to use java.util.Date only.

Here in my example I used it and it's working fine in my system.
thumbnail
Murali Karteek, modificado 10 Anos atrás.

RE: Date Format Issue

Junior Member Postagens: 37 Data de Entrada: 05/03/12 Postagens Recentes
Hi Anand Gopalan,

It's not possible to cast from java.util.Date to java.sql.Date. You need to convert from one type to the other instead.

java.util.Date tempDate = formatter1.parse(date);
java.sql.Date t02Traveldate= new java.sql.Date(tempDate .getTime());


Thanks & regards,
Karteek
anand gopalan, modificado 10 Anos atrás.

RE: Date Format Issue

Expert Postagens: 442 Data de Entrada: 02/03/12 Postagens Recentes
Hi Karteek,

thank you for your reply. Can you please give me a detailed code of below. it will very very useful for me.

java.util.Date tempDate = formatter1.parse(date);
java.sql.Date t02Traveldate= new java.sql.Date(tempDate .getTime());
anand gopalan, modificado 10 Anos atrás.

RE: Date Format Issue

Expert Postagens: 442 Data de Entrada: 02/03/12 Postagens Recentes
Hi,

I need to get the system date and I want to store this data to database. I am using below code in action class. Please help me solve this issue.

TravelDetails.java
//handle Apply Date
Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());

int currentDay = localCalendar.get(Calendar.DATE);
int currentMonth = localCalendar.get(Calendar.MONTH) + 1;
int currentYear = localCalendar.get(Calendar.YEAR);

System.out.println("Day:Month:Year"+currentDay+currentMonth+currentYear); ---> Printing Current Date

java.util.Date t02Applydate1 = PortalUtil.getDate(currentDay, currentMonth, currentYear); ---> I stuck up this line its giving Null value

System.out.println("java.util.Date t02Applydate1 "+t02Applydate1); ----> Printing Null


DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String text = df.format(t02Applydate1);

try{
tempDate1 = df.parse(text);
}catch(ParseException e){
}
java.sql.Date t02Applydate= new java.sql.Date(tempDate1.getTime());
System.out.println("Apply date D value="+t02Applydate);
thumbnail
Kan Zhang, modificado 10 Anos atrás.

RE: Date Format Issue

Junior Member Postagens: 68 Data de Entrada: 01/12/10 Postagens Recentes
Your code does not make sense to me.

First, if you want to get the system date, you can just do a
Date date = new Date().
and that is all.

Second, if you want to increase the month by one, you can not use
int currentMonth = localCalendar.get(Calendar.MONTH) + 1;
Because when the month is December, your currentMonth will become 12+1=13 which is not valid.

You should always use
Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());
localCalendar.add(Calendar.MONTH,1);
to add one month.

Then you can get the Date by calling
Date date = localCalendar.getTime();
To get the date.

If you really want to use the PortalUtil.getDate() API, Please pay attention to the parameters of the API
PortalUtil.getDate(int month, int day, int year)
But in your code you are using
PortalUtil.getDate(currentDay, currentMonth, currentYear)
which is wrong.

BTW, in your first post you had the "java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date" error. it is because you imported "java.sql.Date" instead of "java.util.Date". You should never require a "java.sql.Date" type in your Action class.
anand gopalan, modificado 10 Anos atrás.

RE: Date Format Issue

Expert Postagens: 442 Data de Entrada: 02/03/12 Postagens Recentes
Hello Kan,

Thank your for good suggestion.

I am developing Employee Travel Model, for that Employee fill the form and click Apply it should go to the approver and insert the records into the database. For that when Employee click the apply button in the form it should take system date as Apply date, for that I created table in the database and get the system date and store in the database. And I am not too good in the coding. Please let me know any thing wrong in the coding.




TravelDetails.java

Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());
localCalendar.add(Calendar.MONTH,1);
java.util.Date date = localCalendar.getTime();

int day=date.getDay();
int month=date.getMonth();
int year=date.getMonth();

System.out.println("Day:Month:Year---------->"+date);
java.util.Date t02Applydate1 = PortalUtil.getDate( day, month, year);

System.out.println("java.util.Date t02Applydate1 "+t02Applydate1);

DateFormat df = new SimpleDateFormat("dd/mm/yyyy");
String text = df.format(t02Applydate1);

try{
tempDate2 = df.parse(text);
}catch(ParseException e){

}
java.sql.Date t02Appydate= new java.sql.Date(tempDate2.getTime());
System.out.println("Apply date value--->"+t02Appydate);

//EMP_TRAVEL_DETAILSLocalServiceImpl.java
public class EMP_TRAVEL_DETAILSLocalServiceImpl
extends EMP_TRAVEL_DETAILSLocalServiceBaseImpl {
/*
* NOTE FOR DEVELOPERS:
*
* Never reference this interface directly. Always use {@link com.test.service.EMP_TRAVEL_DETAILSLocalServiceUtil} to access the e m p_ t r a v e l_ d e t a i l s local service.
*/
public void add(int t02Tranid,String t02Emplid, String t02Ename,String t02Vechiletype, String t02Vechileno, String t02Email,
String t02Approver, String t02Travelfrom, String t02Travelto,Date t02Traveldate, String t02Landmark, int t02Totalkm,String t02Status,Date t02Appydate,Date t02Apprdate) {
System.out.println("******Inside add method******");
try {
System.out.println("******Inside add method & try******");
try {
System.out.println("***********inside another try*********** ");

EMP_TRAVEL_DETAILS tdetails = EMP_TRAVEL_DETAILSLocalServiceUtil.addEMP_TRAVEL_DETAILS(createEMP_TRAVEL_DETAILS(null))// problem is in this line, ;

//tdetails.setT02Tranid(t02Tranid);
tdetails.setT02Emplid(t02Emplid);
tdetails.setT02Ename(t02Ename);
tdetails.setT02Vechiletype(t02Vechiletype);
tdetails.setT02Vechileno(t02Vechileno);
//tdetails.setT02Email(t02Email);
tdetails.setT02Approver(t02Approver);
tdetails.setT02Travelfrom(t02Travelfrom);
tdetails.setT02Travelto(t02Travelto);
tdetails.setT02Traveldate(t02Traveldate);
tdetails.setT02Totalkm(t02Totalkm);
tdetails.setT02Landmark(t02Landmark);
//tdetails.setT02Status(t02Status);
System.out.println("*********before t02Appydate set**************");
tdetails.setT02Appydate(t02Appydate);
//tdetails.setT02APPYDATE(T02APPYDATE);
System.out.println("*******after t02Appydate set**********"+ t02Appydate);
tdetails.setT02Apprdate(t02Apprdate);


System.out.println("add the records");


EMP_TRAVEL_DETAILSLocalServiceUtil.updateEMP_TRAVEL_DETAILS(tdetails);
} catch (com.liferay.portal.kernel.exception.SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



} catch (Exception e) {
e.printStackTrace();
}
}
}

Service.xml.

<column name="t02Tranid" type="int"></column>
<column name="t02Ename" type="String"></column>
<column name="t02Vechiletype" type="String"></column>
<column name="t02Vechileno" type="String"></column>
<column name="t02Email" type="String"></column>
<column name="t02Approver" type="String"></column>
<column name="t02Travelfrom" type="String"></column>
<column name="t02Travelto" type="String"></column>
<column name="t02Traveldate" type="Date"></column>
<column name="t02Landmark" type="String"></column>
<column name="t02Totalkm" type="int"></column>
<column name="t02Status" type="String"></column>
<column name="t02Appydate" type="Date"></column>
<column name="t02Apprdate" type="Date"></column>


Error I am getting:

08:53:38,134 ERROR [JDBCExceptionReporter:75] ORA-00904: "T02APPYDATE": invalid identifier,

but I declare the T02APPYDATE in the database, why I am getting this error & How to fix this problem?

Please help me kan.
anand gopalan, modificado 10 Anos atrás.

RE: Date Format Issue

Expert Postagens: 442 Data de Entrada: 02/03/12 Postagens Recentes
Hi All,

I fixed this issue.