Как получить предыдущую дату в java
У меня есть объект String в формате yyyyMMdd. Есть ли простой способ получить строку с предыдущей датой в том же формате?
Благодаря
Ответы
Ответ 1
Я бы немного переписал эти ответы.
Вы можете использовать
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
// Get a Date object from the date string
Date myDate = dateFormat.parse(dateString);
// this calculation may skip a day (Standard-to-Daylight switch)...
//oneDayBefore = new Date(myDate.getTime() - (24 * 3600000));
// if the Date->time xform always places the time as YYYYMMDD 00:00:00
// this will be safer.
oneDayBefore = new Date(myDate.getTime() - 2);
String result = dateFormat.format(oneDayBefore);
Чтобы получить те же результаты, что и те, которые вычисляются с помощью Calendar.
Ответ 2
Вот как это сделать без Joda Time:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Main {
public static String previousDateString(String dateString)
throws ParseException {
// Create a date formatter using your format string
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
// Parse the given date string into a Date object.
// Note: This can throw a ParseException.
Date myDate = dateFormat.parse(dateString);
// Use the Calendar class to subtract one day
Calendar calendar = Calendar.getInstance();
calendar.setTime(myDate);
calendar.add(Calendar.DAY_OF_YEAR, -1);
// Use the date formatter to produce a formatted date string
Date previousDate = calendar.getTime();
String result = dateFormat.format(previousDate);
return result;
}
public static void main(String[] args) {
String dateString = "20100316";
try {
// This will print 20100315
System.out.println(previousDateString(dateString));
} catch (ParseException e) {
System.out.println("Invalid date string");
e.printStackTrace();
}
}
}
Ответ 3
Вы можете использовать:
Calendar cal = Calendar.getInstance();
//subtracting a day
cal.add(Calendar.DATE, -1);
SimpleDateFormat s = new SimpleDateFormat("yyyyMMdd");
String result = s.format(new Date(cal.getTimeInMillis()));
Ответ 4
Это намного сложнее, чем в Java без поддержки библиотеки.
Вы можете проанализировать данную строку в объект Date, используя экземпляр класса SimpleDateFormat.
Затем вы можете использовать Calendar add(), чтобы вычесть один день.
Затем вы можете использовать SimpleDateFormat format() для получить форматированную дату как строку.
Joda Time library намного проще API.
Ответ 5
используйте SimpleDateFormat для анализа строки по дате, а затем вычтите один день. после этого снова преобразуйте дату в String.
Ответ 6
HI,
Я хочу получить 20 дней назад, до текущей даты,
Calendar cal = Calendar.getInstance();
Calendar xdate = (Calendar)cal.clone();
xdate.set(Calendar.DAY_OF_YEAR, - 20);
System.out.println(" Current Time "+ cal.getTime().toString());
System.out.println(" X Time "+ xdate.getTime().toString());
У меня был какой-то ожидаемый результат в ООН, Когда я попытался 11 января,
Текущее время Вт Янв 11 12:32:16 IST 2011
X Время Сб Дек 11 12:32:16 IST 2010
Calendar cal = Calendar.getInstance();
Calendar xdate = (Calendar)cal.clone();
xdate.set(Calendar.DAY_OF_YEAR,cal.getTime().getDate() - 20 );
System.out.println(" Current Time "+ cal.getTime().toString());
System.out.println(" X Time "+ xdate.getTime().toString());
Этот код решил мою проблему.
Ответ 7
Если вы хотите использовать стороннюю утилиту, Joda-Time, вот пример кода с использованием Joda-Time 2.3 на Java 7. Делает только две строки.
String dateAsString = "20130101";
org.joda.time.LocalDate someDay = org.joda.time.LocalDate.parse(dateAsString, org.joda.time.format.DateTimeFormat.forPattern("yyyymmdd"));
org.joda.time.LocalDate dayBefore = someDay.minusDays(1);
Посмотрите результаты:
System.out.println("someDay: " + someDay );
System.out.println("dayBefore: " + dayBefore );
При запуске:
someDay: 2013-01-01
dayBefore: 2012-12-31
Этот код предполагает, что у вас нет часового пояса. Недостаток часового пояса редко бывает хорошим, но если это ваш случай, этот код может работать на вас. Если у вас есть часовой пояс, используйте DateTime вместо LocalDate.
Об этом примере кода и о Joda-Time...
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// Joda-Time - The popular alternative to Sun/Oracle notoriously bad date, time, and calendar classes bundled with Java 7 and earlier.
// http://www.joda.org/joda-time/
// Joda-Time will become outmoded by the JSR 310 Date and Time API introduced in Java 8.
// JSR 310 was inspired by Joda-Time but is not directly based on it.
// http://jcp.org/en/jsr/detail?id=310
// By default, Joda-Time produces strings in the standard ISO 8601 format.
// https://en.wikipedia.org/wiki/ISO_8601
Ответ 8
Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.YEAR, -1);
Date dt2 = new Date(cal2.getTimeInMillis());
System.out.println(dt2);