Есть активити с двумя кнопками Prev
и Next
и TextView
.
По нажатию на Prev в TextView нужно выводить предыдущую неделю (понедельник - воскресенье даты). Например 09.12.2019 - 15.12.2019, а по нажатию на Next наоборот следующую неделю 23.12.2019 - 29.12.2019. Как это реализовать?
Вот весь код:
public class AboutActivity extends AppCompatActivity {
private Calendar calendar = Calendar.getInstance();
private Button btnPrev;
private Button btnNext;
private TextView txtPeriod;
private TextView txtMills;
private boolean isCurrentDate = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
btnPrev = findViewById(R.id.btnPrev);
btnNext = findViewById(R.id.btnNext);
txtPeriod = findViewById(R.id.txtPeriod);
txtMills = findViewById(R.id.txtMills);
}
@Override
protected void onResume() {
super.onResume();
setWeekNext();
btnNext.setOnClickListener(v -> {
setWeekNext();
});
btnPrev.setOnClickListener(v -> {
setWeekPrev();
});
}
//Вывод предыдущей недели
private void setWeekPrev() {
if (!isCurrentDate) {
calendar.setTime(new Date());
isCurrentDate = true;
}
calendar.setTimeZone(TimeZone.getDefault());
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //Устанавливаем понедельник первым днем недели
calendar.set(Calendar.HOUR_OF_DAY, 0); //Устанавливаем часы в ноль
calendar.set(Calendar.MINUTE, 0); //минуты в ноль
calendar.set(Calendar.SECOND, 0); //секкунды в ноль
calendar.set(Calendar.MILLISECOND, 0); //миллисекунды в ноль
calendar.add(Calendar.WEEK_OF_YEAR, -1); //Предыдущая неделя
long mills1 = calendar.getTimeInMillis()/1000L;
txtPeriod.setText(calendar.getTime() + " ");
txtMills.setText(mills1 + " / ");
calendar.add(Calendar.DAY_OF_WEEK, 6);
txtPeriod.append(calendar.getTime() + "");
long mills2 = calendar.getTimeInMillis()/1000L;
calendar.add(Calendar.DAY_OF_WEEK, -6);
txtMills.append(mills2 + "");
}
//Вывод следующей недели
private void setWeekNext() {
calendar.setTimeZone(TimeZone.getDefault());
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //Устанавливаем понедельник первым днем недели
calendar.set(Calendar.HOUR_OF_DAY, 0); //Устанавливаем часы в ноль
calendar.set(Calendar.MINUTE, 0); //минуты в ноль
calendar.set(Calendar.SECOND, 0); //секкунды в ноль
calendar.set(Calendar.MILLISECOND, 0); //миллисекунды в ноль
long mills1 = calendar.getTimeInMillis()/1000L;
txtPeriod.setText(calendar.getTime() + " ");
txtMills.setText(mills1 + " / ");
calendar.add(Calendar.WEEK_OF_YEAR, 1); //Следующая неделя
calendar.add(Calendar.DAY_OF_WEEK, -1); //Предыдущий день. (т.е. воскресенье)
txtPeriod.append(calendar.getTime() + "");
long mills2 = calendar.getTimeInMillis()/1000L;
txtMills.append(mills2 + "");
}
}
В итоге я бы хотел получить следующее:
btnNext
получаем понедельник и воскресенье следующей неделиbtnPrev
получаем понедельник и воскресенье предыдущей неделии так по нарастающей или по убывающей смотря какую кнопку нажали.
В mills1
и mills2
соответственно записываются timestamp
понедельника и воскресенья недели.
Второй параметр в методе add()
может принимать отрицательные значения.
calendar.add(Calendar.WEEK_OF_YEAR, -1); // переход на предыдущую неделю
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не могу вывести русские буквы в TextView через парсерИспользую такую комбинацию: