We help IT Professionals succeed at work.

Java Date  How to convert String to DATE

LakshmanaRavula
on
339,295 Views
Last Modified: 2012-05-04
Hi

Iam trying to Conver a String(mm/dd/yyyy) to Date
Here is code
DateFormat myDateFormat = new SimpleDateFormat(strFormat);
Date myDate = null;
try {
     myDate = myDateFormat.parse(strDate);
} catch (ParseException e) {
     System.out.println("Invalid Date Parser Exception ");
     e.printStackTrace();
}
System.out.println("Finished Date Function " + myDate.getDay());

My Problem is iam passing 4/6/2004

but return value month is coming as 2 how to get Day of the Month

Comment
Watch Question

Author

Commented:

Here is the values
 format = "MM/dd/yyyy"
 date    = 4/6/2004
CERTIFIED EXPERT
Top Expert 2016

Commented:
>>My Problem is iam passing 4/6/2004

Well the format String should then be

strFormat = "m/d/yyyy";

or

strFormat = "d/m/yyyy";


CERTIFIED EXPERT
Top Expert 2016

Commented:
Sorry, in that case

strFormat = "M/d/yyyy";

Author

Commented:
I tried this option but still returning 2 as value when i send date as

Here is Debug Staments
inside Date Function : 4/6/2004--m/d/yyyy
Date is  : Tue Jan 06 00:04:00 EST 2004
Finished Date Function  val is = 2
Day Num Returned is : 2
CERTIFIED EXPERT
Top Expert 2016

Commented:
Sunday = 0
mondY = 1

ETC.

Author

Commented:
Still same problem

inside Date Function : 4/26/2004--M/d/yyyy
Date is  : Mon Apr 26 00:00:00 EDT 2004
Finished Date Function  val  is = 1
Day Num Returned is : 1

Author

Commented:
Ok in that case how can get Day of the Month
CERTIFIED EXPERT
Top Expert 2016
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION
CERTIFIED EXPERT
Top Expert 2016

Commented:
(after setting the cal with your date)

cal.setTime(yourDate);

Author

Commented:
Thats cool  Can you please tell me how can pass String date to Calendar
CERTIFIED EXPERT
Top Expert 2016

Commented:
You can't. Use the formatting technique and parse as you're already doing

Author

Commented:
got it Thank you
CERTIFIED EXPERT
Top Expert 2016

Commented:
8-)

Commented:
System.out.println("Finished Date Function " + myDate.getDate());

answer to your problem

Commented:
actually the getDay() method will return the order of the day in the week so it returns 2 which is Tuesday . since u have given April 6th which is actually Tuesday. so try

myDate.getDate();

Also when you are parsing the string for  Date using SimpleDateFormat make sure u add this line too,

myDateFormat.setLenient(false); like below


try {
     myDateFormat.setLenient(false);
     myDate = myDateFormat.parse(strDate);
} catch (ParseException e) {
     System.out.println("Invalid Date Parser Exception ");
     e.printStackTrace();
}


as it would prevent the automatic conversion of the java to add one to the mext date is u have exceeded the Date for the given month.

ie.. if u give 31 and month as 4(April) which really has 30 days only then ur date will be shown as 1 may.

hope this will work.

Commented:
The comple story from date to string and back is:

            prt("Date is 25 may 2007");
            prt("25/05/05");
            SimpleDateFormat sim = new SimpleDateFormat("dd/MM/yy");
            java.util.Date datum = new java.util.Date();
            try{
                  datum = sim.parse("25/05/05");
            }catch(ParseException e){}      
            prt("Java data object is"+datum);
            prt("");
            prt("datum formatted is then ...");
            
            
            SimpleDateFormat dmj= new SimpleDateFormat("dd/MMM/yyyy");
                   
        String thisDate = dmj.format(datum);
        prt("And after all it's this string:"+thisDate);
            
      }
      public void prt(String s){System.out.println(s);      }

Commented:
One caveaty of the above posts to be aware of is if the first part of the string mattches the pattern a valid date will be returned.  Below is a DateTimeUtil method I created to specify whether the whole string should be matched or not.  So I can choose if date format pattern "dd/mm/yyyy" should throw an exception when the value "10/10/2007HelloWorld" is passed.  You can not rely on text.length() as a format pattern may have things like mmm which may evaluate to September etc.

      /**
       * Get Date from Text using the date format specified
       * @param dateAsText Text date portion
       * @param dateFormat Format the date in text is stored as
       * @param matchWholeString If you want an error to be thrown when a match is found and text exists after the pattern has been matched on the date as text value passed</b>
       * <p>
       * e.g.<br/>
       *       Pattern: dd/mm/yyyy<br/>
       *       Value:   10/10/1977HelloWorld
       * </p>
       * @return Date representation of the text date passed
       * @throws ParseException if text date can not be converted to a date using the format passed
       */
      public static Date getDateFromString(final String dateAsText, final String dateFormat, final boolean matchWholeString) throws ParseException {
        final DateFormat df = new SimpleDateFormat(dateFormat);
            df.setLenient(false);
            final ParsePosition parsePosition = new ParsePosition(0);
            final Date date = df.parse(dateAsText, parsePosition);
            
            // Check ParsePosition is to end of string, otherwise throw ParseException error
            if (matchWholeString && parsePosition.getIndex() < dateAsText.length()) {
                  throw new ParseException("Date pattern '" + dateFormat + "' when resolved and applied to date text '"
                              + dateAsText + "' does not match whole of text string passed, only to position " + parsePosition.getIndex(), parsePosition.getIndex());
            }
        return date;
    }
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.