Как я могу получить вчерашнюю дату без использования Календаря в Java и без отметки времени только даты?
Я написал метод для получения текущей даты в формате yyyy-MM-dd
и хочу иметь возможность также создать другой метод для получения вчерашней даты, за день до текущей даты. Для этого требуется дата, а не метка времени. Я не пытаюсь использовать Calendar
. Я установил текущую дату следующим образом:
public class DateWithNoTimestamp
{
private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";
public final static String getCurrentDate()
{
DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
Date date = new Date();
return dateFormat.format(date);
}
}
Это работает, чтобы получить текущую дату, теперь отдельный метод getYesertdayDate()
У меня возникают проблемы. Как я могу настроить его так же, как и при getCurrentDate()
, когда вычитал один день?
Ответы
Ответ 1
Вы можете просто вычесть 1000 * 60 * 60 * 24
миллисекунды с даты и отформатировать это значение:
Date yesterday = new Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L));
Это быстрый и грязный способ, и, как отмечено в комментариях, он может сломаться, когда происходят переходные периоды перехода на летнее время (два дня в году). Рекомендуемыми альтернативами являются API календаря, Joda API или новый API-интерфейс JDK 8:
LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
Ответ 2
Я обнаружил, что org.apache.commons.lang3.time.DateUtils
более интуитивно понятен и прост в использовании.
По вашему вопросу
Date date = DateUtils.addDays(new Date(), -1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
сделает трюк. И он хорошо работает и в JDK7 или ниже.
Ответ 3
С Java 8 и более поздними версиями используйте java.time.LocalDate
класс:
LocalDate yesterday = LocalDate.now().minusDays(1L);
Ответ 4
Вы можете создать объект Date() для "вчера":
private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";
public final static String format(Date date) {
DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
return dateFormat.format(date);
}
public final static String formatToday() {
return format(new Date());
}
public final static String formatYesterday() {
return format(new Date(new Date().getTime() - 24*3600*1000));
}
Ответ 5
Попробуйте следующее:
public class DateWithNoTimestamp
{
private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";
public final static String getCurrentDate()
{
DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
Date date = new Date();
date .setTime(date.getTime()-24*60*60*1000); // Subtract 24*60*60*1000 milliseconds
return dateFormat.format(date);
}
}
Ответ 6
Пожалуйста, попробуйте это, чтобы получить дату вчера:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
long yourDateMillis = System.currentTimeMillis()- (24 * 60 * 60 * 1000);
Time yourDate = new Time();
yourDate.set(yourDateMillis);
String formattedDate = yourDate.format("%d-%m-%Y");
txtViewYesterday.setText(formattedDate);}