Surya Chandra
Surya Chandra

Reputation: 1591

unexpected output while converting a string to date in java

I have a string "12/9/2010 4:39:38 PM" which i have to convert to a date object. I am using the following code to do it:

String str = "12/9/2010 4:39:38 PM";

DateFormat formatter ;

Date date ;

formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a");

date =(Date)formatter.parse(str);             

System.out.println("date printed"+date);      

However, when im printing the output, i see

Thu Dec 09 04:39:38 IST 2010

How do I get the date exactly the way I declared in the string i.e

12/9/2010 4:39:38 PM

as output? Pls help

Upvotes: 2

Views: 702

Answers (8)

Rashmi Rai
Rashmi Rai

Reputation: 23

public static void main(String args[])
{
        String string="2012-09-13"; 
        Date str=processFileDate(string);
        System.out.println(str);
}
public static Date processFileDate(String str)
{ //returns the date or "null" if doesn't exist

    String[] strformat={
            "EEE,dd MMM yyyy","MMM dd, yyyy, hh.mmaa zzz",
            "EEEE, MMMMM dd  yyyy 'at' hh:mm",
            "EEEE, MMMMM dd, yyyy, hh:mm",
            "EEE MMM dd yyyy, hh:mm ",
            "dd MMMMM yyyy'Last updated at' hh:mm zzz",
            "MMM dd, yyyy 'at' hh:mmaa",
            "MMM dd, yyyy 'at'  hh:mmaa zzz",
            "MMMMM dd, yyyy, hh:mm aa zzz",
            "EEE, MMM dd, yyyy hh:mm ",
            "MMMMM dd, yyyy hh:mm zzz",
            "MMMM dd, yyyy hh:mm aa",
            "MMMM dd, yyyy hh:mmaa",
            "MMMM dd, yyyy hh:mm",
            "dd MMMM yyyy hh:mm:ss",
            "dd MMMM yyyy hh:mm",
            "MMMM dd, yyyy",
            "dd MMMM yyyy ",
            "dd MM yy",
            "yyyy MMMM dd",
            "dd'st' MMMM,yyyy",
            "dd'nd' MMMM,yyyy",
            "dd'rd' MMMM,yyyy",
            "MMMM dd,yyyy",
            "MMM dd yy",
            "mm dd yy",
            "yyyy-MM-dd",
            "yyyy-MM-dd HH:mm:ss",
            "E MMM dd hh:mm:ss Z yyyy",
            "EEE, dd MMM yyyy HH:mm:ss Z"

    };

    String temp="null";
    for(int i=0;i<str.length();i++){
        temp=str.substring(i, str.length());
        for(int l=0;l<strformat.length;){
            Date strp=checkformat(temp,strformat[l]);
            if(strp!=null)
            {
                return strp;
            }
            else l++;
        }
     }
    return null;
}

private static Date checkformat(String str, String sdf) {
     SimpleDateFormat sdformat=new SimpleDateFormat(sdf);

       try{
        Date d=sdformat.parse(str);
        return d;
       }catch(Exception e){}

       return null;
}

Upvotes: 0

Alberto
Alberto

Reputation: 2982

You can entirely specify the format of your date output using the class Formatter

Short answer

String str = "12/9/2010 4:39:38 PM";
Formatter formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a");
Date date =(Date)formatter.parse(str);
Formatter formatterOutput = new SimpleDateFormat("MM/dd/yyyy HH:m:ss a");
String s = formatterOutput.format(date);

Other examples

Format formatter;

// The year
formatter = new SimpleDateFormat("yy");    // 02
formatter = new SimpleDateFormat("yyyy");  // 2002

// The month
formatter = new SimpleDateFormat("M");     // 1
formatter = new SimpleDateFormat("MM");    // 01
formatter = new SimpleDateFormat("MMM");   // Jan
formatter = new SimpleDateFormat("MMMM");  // January

// The day
formatter = new SimpleDateFormat("d");     // 9
formatter = new SimpleDateFormat("dd");    // 09

// The day in week
formatter = new SimpleDateFormat("E");     // Wed
formatter = new SimpleDateFormat("EEEE");  // Wednesday

// Get today's date
Date date = new Date();

// Some examples
formatter = new SimpleDateFormat("MM/dd/yy");
String s = formatter.format(date);
// 01/09/02

formatter = new SimpleDateFormat("dd-MMM-yy");
s = formatter.format(date);
// 29-Jan-02

// Examples with date and time; see also
// Formatting the Time Using a Custom Format
formatter = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
s = formatter.format(date);
// 2002.01.29.08.36.33

formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
s = formatter.format(date);
// Tue, 09 Jan 2002 22:14:02 -0500

from: http://www.exampledepot.com/egs/java.text/formatdate.html

Upvotes: 2

sethu
sethu

Reputation: 8431

Not sure what you are trying to accomplish. But you'll have to call SimpleDateFormat.format() to get what you are expecting. Printing the date directly will get only toString() implementation of Date

Upvotes: 0

mcfinnigan
mcfinnigan

Reputation: 11638

Java.util.Date has no concept of an intrinsic format - You need to use the format(java.util.Date d) method to see a formatted String representation of your Date object.

String str = "12/9/2010 4:39:38 PM";

DateFormat formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a");
Date date =(Date)formatter.parse(str);

System.out.println("date printed"+formatter.format(date));

Upvotes: 0

kosa
kosa

Reputation: 66657

formatter = new SimpleDateFormat("MM/dd/yyyy HH:m:ss a");
String temp =formatter.format(date ); 

Upvotes: 0

m0skit0
m0skit0

Reputation: 25873

Converting it back to String using SimpleDateFormat?

Upvotes: 0

Bohemian
Bohemian

Reputation: 425228

Use the same formatter:

System.out.println("date printed "+ formatter.format(date));

Upvotes: 1

Jon Skeet
Jon Skeet

Reputation: 1502486

You're assuming that the Date value itself remembers the format - it doesn't. Date.toString will do what it wants - because the Date only represents an instant in time.

If you want to format a Date, use your formatter again:

System.out.println(formatter.format(date));

However, that won't necessarily return the exact same value that was in your string, as there may be multiple values which parse the same way. For example, as you've only used "H:m:s", I'd expect "4:5:6" to be parsed the same way as "04:05:06".

Upvotes: 5

Related Questions