2014-01-02 2 views
1

Я пытаюсь получить 1 месяц назад дату и время, но то, что я получаю от этого, было в 2013 году 11 02, которое правильное должно быть в 2013 году.Получите 1 месяц назад от текущего datetime

Моего код, как показано ниже: -

Calendar calendar = Calendar.getInstance(); 
    calendar.add(Calendar.MONTH, -1); 

    int thisYear = calendar.get(Calendar.YEAR); 
    int thisMonth = calendar.get(Calendar.MONTH); 
    int thisDay = calendar.get(Calendar.DAY_OF_MONTH); 
+0

Это может помочь прочитать: http://stackoverflow.com/questions/344380/why-is-january-month-0-in-java-calendar –

+0

http://docs.oracle.com/javase/7 /docs/api/java/util/Calendar.html#MONTH они нулевые индексируются, поэтому ваш код верен, вам просто нужно понять, как читать значение –

+1

Значения констант начинаются с 0, т.е. o за январь и 11 за декабрь –

ответ

5

Вашего код правильный, я думаю, что месяц равен нуль индексируется;)

Попробуйте это,

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.MONTH, -1); 
Date date = calendar.getTime(); 
SimpleDateFormat format = new SimpleDateFormat("yyyy MM dd"); 
String dateOutput = format.format(date); 

Этот шо uld интерпретирует значения даты для вас в логических единицах, а не во внутреннем представлении

Оформить оформление документации для SimpleDateFormat для более индивидуального подхода, я просто сделал некоторые предположения на основе вашего текста вопроса.

+0

Да нуль проиндексирован, но я получил, чтобы получить январь, как это сделать – micky

+0

Ой, как вы хотите, чтобы напечатать слово январь? вы можете использовать таблицу поиска, которая отображает Calendar.JANUARY -> «Январь» или просто использует SimpleDateFormatter и передает ему дату, когда объект Calendar представляет –

+0

любой пример кода для этого? – micky

2

Вы можете попробовать это

Calendar calendar = Calendar.getInstance(); 
    if(calendar.get(Calendar.MONTH) == Calendar.JANUARY){ 
     calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)-1); 
     calendar.set(Calendar.MONTH, calendar.DECEMBER); 
    }else{ 
     calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)-1); 
    } 

    int thisYear = calendar.get(Calendar.YEAR); 
    int thisMonth = calendar.get(Calendar.MONTH); 
    int thisDay = calendar.get(Calendar.DAY_OF_MONTH); 
+0

Mr Вниз избирателем вы можете объяснить причину? –

+0

Вы не можете делать 'calendar.YEAR-1'. Это не имеет никакого смысла. YEAR является статическим членом класса Calendar. ГОД - постоянная. Вычитать 1 из него не имеет смысла, поскольку это всего лишь ключ для поиска значения от –

+0

. Этот код возвращает результат 2014-11-2 00:00:00. Я должен получить 2013-12-02 00:00:00 – micky

Смежные вопросы