madan V
madan V

Reputation: 844

Convert string to DateFormat

i am trying to convert a string utc date to Date. by using the following code

This is My UTC String Date - 12/31/2013 8:40:00 AM

i want to convert this string to UTC Date.

static final String DATEFORMAT = "dd/MM/yyyy HH:mm:ss aa";

StringDateToDate("**12/31/2013 8:40:00 AM**");

 public static Date StringDateToDate(String StrDate)
    {
        Date dateToReturn = null;
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

            try {
                dateToReturn = dateFormat.parse(StrDate);
            } catch (ParseException e) {

                e.printStackTrace();
            }


        return dateToReturn;

}

but i am getting the wrong date in wrong format (sun jul 12 19:40:00 CDT 2015). how can i convert this utc date string to utc date. i am getting the utcdatestring from a rest webservice in XML format.

Upvotes: 0

Views: 1105

Answers (8)

Aris2World
Aris2World

Reputation: 1234

The result obtained is not wrong but it is what expected.

By default, parsing is lenient. With lenient parsing, the parser may use heuristics to interpret inputs that do not precisely match this object's format.

The heuristics uses the number specified for month not as months in the specified year but as months since the specified year, 31 months are 2 years and 7 months so: 01/2013 + 2years + 7 months = 07/2015.

This can be confusing so the suggestion is to set the lenient parsing to false before parsing but when pattern doesn't match something in your string a parsing exception is thrown.

public static Date StringDateToDate(String StrDate) {
    Date dateToReturn = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

    dateFormat.setLenient(false);

    try {
        dateToReturn = dateFormat.parse(StrDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    return dateToReturn;
}

Upvotes: 0

Serdar
Serdar

Reputation: 383

And also watch out for HH. HH is Hour in day (0-23). If your input date hour is 0-11 (possibly like this since AM\PM is given and patter has aa at the end) then KK must be used instead of HH.

Upvotes: 1

Prabhakaran Ramaswamy
Prabhakaran Ramaswamy

Reputation: 26094

Change your dateformat like this.

    String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";

Upvotes: 2

Keerthivasan
Keerthivasan

Reputation: 12880

Your input is wrong(there is no 31 month) , change it to a valid month

StringDateToDate("12/01/2013 8:40:00 AM"); 

to be compatible with the DateFormat

or Change your Dateformat to suit your input value

static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";

Upvotes: 2

Orphamiel
Orphamiel

Reputation: 884

First your date format is wrong it should be :

static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";

secondly, your input has to not have the asterixs(*) like this :

Date a = StringDateToDate("12/31/2013 8:40:00 AM");
//yea I know I should be using Log but I'm testing on java
System.out.println(a.toString()); 

If you really want the asterixs, do this :

String b = "**12/31/2013 8:40:00 AM**";
StringDateToDate(b.substring(2, b.length()-2));

Upvotes: 2

Kirk
Kirk

Reputation: 5077

Just try this. Probably the order of your Date Format is wrong

String dtStart = "12/31/2013 8:40:00 AM";  
SimpleDateFormat  format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aa");  

Date date = format.parse(dtStart);  
System.out.println(date);  

Upvotes: 2

ayon
ayon

Reputation: 2180

Your date format should be this in order to parse the String you have given here.

static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";

Upvotes: 1

kathir
kathir

Reputation: 489

G   Era designator       Text               AD
y   Year                 Year               1996; 96
M   Month in year        Month              July; Jul; 07
w   Week in year         Number             27
W   Week in month        Number             2
D   Day in year          Number             189
d   Day in month         Number             10
F   Day of week in month Number             2
E   Day in week          Text               Tuesday; Tue
u   Day number of week   Number             1
a   Am/pm marker         Text               PM
H   Hour in day (0-23)   Number             0
k   Hour in day (1-24)   Number             24
K   Hour in am/pm (0-11) Number             0
h   Hour in am/pm (1-12) Number             12
m   Minute in hour       Number             30
s   Second in minute     Number             55
S   Millisecond          Number             978
z   Time zone            General time zone  Pacific Standard Time; PST; GMT-08:00
Z   Time zone            RFC 822 time zone  -0800
X   Time zone            ISO 8601 time zone -08; -0800; -08:00

This is the Date and Time Patterns.

String string = "January 2, 2010";
Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(string);
System.out.println(date);

Upvotes: 1

Related Questions