Есть кусок кода:
private void changeCalendarDay(int daysCount,int field){
GregorianCalendar calendar = new GregorianCalendar();
calendar.set(year,month,day);
calendar.add(field,daysCount);
year = calendar.get(GregorianCalendar.YEAR);
month = calendar.get(GregorianCalendar.MONTH);
day = calendar.get(GregorianCalendar.DATE);
}
Этот метод вызывается по нажатию на кнопку вот код вызова:
addDateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeCalendarDay(1,GregorianCalendar.DATE);
updateDateEditText();
}
});
Проблема в том, что когда я на неё нажимаю, то всё работает до 30.08.2017 числа, если нажать на кнопку ещё раз, то вместо 31.08.2017 дата меняется на 01.09.2017. И такая проблема с другими месяцами... Что я делаю не так?
Вывод даты производится методом updateDateEditText()
:
private void updateDateEditText(){
if(month<10) {
currentDateEditText.setText(day+".0"+month+"."+year);
} else {
currentDateEditText.setText(day+"."+month+"."+year);
}
}
Месяцы (поле Calendar.MONTH
) нумеруются с нуля. Соответственно, 0 — это январь, а 8 — сентябрь.
Из документации:
Field number for get and set indicating the month. This is a calendar-specific value. The first month of the year in the Gregorian and Julian calendars is JANUARY which is 0; ..
Для преобразования даты в строку в заданном формате проще использовать SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String text = sdf.format(calendar.getTime());
В данном случае попробуйте воспользоваться SimpleDateFormat, он на много удобен:
import java.text.SimpleDateFormat;
import java.util.*;
public class DateTest
{
private static final Logger LOG = Logger.getLogger(DateTest.class.getName());
public static void main(String[] args)
{
System.out
.println(
new SimpleDateFormat("dd.MM.yyyy")
.format(
changeCalendarDay(5, Calendar.DAY_OF_MONTH)
)
);
}
private static Date changeCalendarDay(int daysCount, int field)
{
GregorianCalendar calendar = new GregorianCalendar();
calendar.set(2017, 10, 10);
calendar.add(field, daysCount);
return calendar.getTime();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
I can't scale and move components in IntelliJ with its GridLayoutThe problem is when I move/scale components they don't move to the exact place
Хочу добавить одну лишную строчкуЕсли в TextView указать maxLines = 4
Здравствуйте! Задача добавить следующую строку после определенной, но у меня почему то выходит именно замена следующей строки, но самое главное...
Я пытаюсь сделать OAuth 20 авторизацию с помощью стандартных средств Spring Security OAuth, никаких дополнительных настроек не применяется, конфигурация...