2012-03-11 5 views
-1

Когда я создаю Date от разбора String и доступа к дню месяца, я получаю неправильное значение.Как получить день месяца из форматированной строки?

Date datearr = null; 
DateFormat df1 = new SimpleDateFormat("dd-MM-yyyy"); 
String dataa = "17-03-2012"; 
try { 
    datearr = df1.parse(dataa); 
} catch (ParseException e) { 
    Toast.makeText(this, "err", 1000).show(); 
} 

int DPDMonth = datearr.getMonth() + 1; 
int DPDDay = datearr.getDay(); 
int DPDYear = datearr.getYear() + 1900; 

System.out.println(Integer.toString(DPDDay)+"-"+Integer.toString(DPDMonth)+"-"+Integer.toString(DPDYear)); 

Почему я получаю 0 вместо 17?

03-11 10:24:44.286: I/System.out(2978): 0-3-2012 
+3

Прочитайте javadoc методов, которые вы используете, обратите внимание на их предупреждение об устаревании и замените их кодом, который предлагает документация. А также подумайте о том, что произойдет, если бы у вас было ParseException, когда был выполнен код 'datearr.getMonth()'. –

+2

И, пожалуйста, используйте соглашения java, связанные с именами переменных ... это очень раздражает, пытаясь прочитать код и выделить переменную, выделенную как класс. – Marcelo

+0

Извините, это мое первое сообщение здесь. –

ответ

1

Вот фрагмент не использует устаревшие методы больше, исправляет проблемы именования и упрощает вывод.

Date datearr = null; 
    DateFormat df1 = new SimpleDateFormat("dd-MM-yyyy"); 
    String dataa = "17-03-2012"; 
    try { 
     datearr = df1.parse(dataa); 
    } catch (ParseException e) { 
     Toast.makeText(this, "err", 1000).show(); 
     return; // do not continue in case of a parse problem!! 
    } 

    // "convert" the Date instance to a Calendar 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(datearr); 

    // use the Calendar the get the fields 
    int dPDMonth = cal.get(Calendar.MONTH)+1; 
    int dPDDay = cal.get(Calendar.DAY_OF_MONTH); 
    int dPDYear = cal.get(Calendar.YEAR); 

    // simplified output - no need to create strings 
    System.out.println(dPDDay+"-"+dPDMonth+"-"+dPDYear); 
0

Вы должны использовать

int DPDDay = datearr.getDate(); 

getDay() возвращает день в неделю

+0

Zoon Nooz, thx! Извините, ребята, все из-за моей небрежности –

0

Этот вид работы гораздо проще при использовании библиотеки сторонних производителей, Joda-Time 2.3.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
// import org.joda.time.*; 
// import org.joda.time.format.*; 

String dateString = "17-03-2012"; 

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MM-yyyy"); 
DateTime dateTime = formatter.parseDateTime(dateString).withTimeAtStartOfDay(); 

int dayOfMonth = dateTime.getDayOfMonth(); 
Смежные вопросы