2012-03-09 3 views
2

Я пытаюсь создать объект Date из строки ввода. Фрагмент кода, который я написал:Java SimpleDateFormat с шаблоном «MM/DD/yyyy» создает неожиданное значение даты

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)); 

выход я получаю:

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

То же самое происходит на другой вход, а также. например

Кто-нибудь знает причину, по которой его изменение значения месяца от чего-либо (03/08) до 01 ?? Информация: Я использую jdk1.6 с Eclipse. И работает эта программа образца через JUnit 4.

ответ

10

new SimpleDateFormat("MM/DD/yyyy"); должен быть new SimpleDateFormat("MM/dd/yyyy"); (dd вместо DD)

  • DD = день в году
  • dd = день в месяц
+0

Спасибо. Кстати, что означает «День в году»? – Swagatika

+0

Только то, что он говорит: номер дня в году: от 0 до 365 – Molske

+0

@Molske (a) На самом деле нет нулевого числа в день года. (б) Високосные годы проводят дополнительный день. Таким образом, в годовом исчислении работает 1-365. –

9

Вы хотите dd, а не DD. Капитал D - 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