Swagatika
Swagatika

Reputation: 3436

Java SimpleDateFormat with pattern "MM/DD/yyyy" produces unexpected date value

I am trying to create a Date object from an input String. The code snippet that I have written is :

inputs are like : effDate = "03/09/2012" and ExpiryDate = "08/31/2012"

System.out.println("eff Date: " + effDate); 
SimpleDateFormat formatter = new SimpleDateFormat("MM/DD/yyyy");
Date date = formatter.parse(effDate);
System.out.println("Effective Date = " + formatter.format(date));

The output I get is :

eff Date: 03/09/2012
Effective Date = 01/09/2012

The same happens for the other input as well. like

exp date: 08/31/2012
Expiry Date = 01/31/2012

Does anyone know the reason why its changing the month value from anything(03/08) to 01 ?? Info: I am using jdk1.6 with Eclipse. And running this sample program through JUNIT 4.

Upvotes: 2

Views: 2541

Answers (2)

Kristof Mols
Kristof Mols

Reputation: 3557

new SimpleDateFormat("MM/DD/yyyy"); should be new SimpleDateFormat("MM/dd/yyyy"); (dd instead of DD)

  • DD = Day in year
  • dd = Day in month

Upvotes: 10

JRL
JRL

Reputation: 78003

You want dd, not DD. Capital D is day in year.

Letter  Date or Time Component        Presentation         Examples
-------------------------------------------------------------------
G       Era designator                Text                 AD
y       Year                          Year                 1996; 96
Y       Week year                     Year                 2009; 09
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 name in week              Text                 Tuesday; Tue
u       Day number of week            Number               1
        (1 = Monday, ..., 7 = Sunday)
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
Z       Time zone                     RFC 822 time zone    -0800
X       Time zone                     ISO 8601 time zone   -08; -0800; -08:00

Upvotes: 9

Related Questions