如何从java中给定的日期获取12个月前的日期
例如:输入-2019年11月12日 输出-12 / Nov / 2018
答案 0 :(得分:3)
这不是一个罕见的问题,之前已经被问过很多次了。
问题是,我至少可以想到4种方法,但是(到目前为止)仅推荐一种方法。
这是将String
的值分解为单独的部分并从中减去值的时候。
这绝不是一个好主意,并且可能是您最糟糕的事情。手动时间操作(即使是毫秒级)也不是您要寻找的解决方案-围绕日期/时间有很多规则。
Calendar
Java 1.1引入了Calendar
类,在没有更好的东西的情况下,我们忍受了。如果您一无所有,您仍然应该避免使用
您可以浏览一下,看看为什么不再建议使用它,例如5 Reasons Why Java's old Date and Calendar API was Bad。
在Java 8引入新的日期/时间API之前,这将是推荐用于日期/时间操作的库。
如果您仍在使用低于8的Java版本,则应考虑改用ThreeTen Backport库,该库采用Java 8中的date / Time API,并使其可用于Java的早期版本。我相信也有适用于Android的版本。
Java 8引入了一个新的date/time API,这是目前推荐的在Java中操作日期/时间值的方法。
在几乎所有情况下,都不建议使用其他方法,因此应避免使用它们(并且如果不能,请使用ThreeTen反向端口!)
因此,以最简单的形式,您可以使用...来实现您的目标。
LocalDate startDate = LocalDate.of(2019, Month.NOVEMBER, 12);
LocalDate endDate = startDate.minusYears(1);
System.out.println(startDate);
System.out.println(endDate);
将打印哪个
2019-11-12
2018-11-12
但是等等,我的输入是
String
然后,您将需要使用DateTimeFormatter
,配置为匹配您的输入,然后将其解析为LocalDate
值。
但是,再次goggling的一点点将展示出大量的可能性和示例
但是我希望输出格式设置为[在此处插入所需的输出格式]
然后,您将需要使用DateTimeFormatter
,将其配置为匹配所需的输出,然后格式化LocalDate
同样,goggling的一小部分将展示大量的可能性和示例
答案 1 :(得分:0)
您可以使用此方法从任意日期减去月份数
public static String subtractMonthsFromDate(String date, int month, String dateFormat) {
final SimpleDateFormat format = new SimpleDateFormat(dateFormat);
Calendar calendar=Calendar.getInstance();
try {
calendar.setTime(format.parse(date));
calendar.add(Calendar.MONTH, -month);
} catch (ParseException e) {
e.printStackTrace();
}
return format.format(calendar.getTime());
}
答案 2 :(得分:-1)
您可以使用日历对象实例:-
private static String getPrevious12MonthDate(Date date){
final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.MONTH, -12);
Date pre12MonthDate = cal.getTime();
return format.format(preMonthDate);
}
答案 3 :(得分:-4)
最佳解决方案取决于您如何表示日期。我创建了两个函数来完成您的任务。一个接受日期格式(“ dd / MM / YYYY”)的字符串输入,另一个使用DateTimeFormatter类将LocalDate对象转换为字符串。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
class Main{
public static void main(String args[]){
System.out.println(subtractYear("10/10/2019")); // Prints 10/10/2018
System.out.println(subtractYear("10/10/1999")); // Prints 10/10/1998
System.out.println(subtractYear("10/10/10")); // Prints 10/10/9
System.out.println(subtractYear(LocalDate.now())); // Prints 22/11/2018
}
/**
* @param date Assumed to be in shape of dd/mm/yyyy
*/
public static String subtractYear(String date){
int year = 0;
try {
year = Integer.parseInt(date.substring(6));
} catch (Exception e){
// Invalid param
return null;
}
String prevYear = date.substring(0,6) + (year - 1);
return prevYear;
}
public static String subtractYear(LocalDate date){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/YYYY");
return subtractYear(dtf.format(date));
}
}