在Java中,如何从日期对象中减去X天?
我想做一些类似的事情:在Java中,如何从日期对象中减去X天?,java,date,datetime,calendar,java.util.date,Java,Date,Datetime,Calendar,Java.util.date,我想做一些类似的事情: Date date = new Date(); // current date date = date - 300; // substract 300 days from current date and I want to use this "date" 怎么做 Java8及更高版本 随着Java8的日期时间API的更改,使用 同样地,你也可以 LocalDate date = someLocalDateInstance.minusDays(300); 有关java
Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"
怎么做 Java8及更高版本
随着Java8的日期时间API的更改,使用
同样地,你也可以
LocalDate date = someLocalDateInstance.minusDays(300);
有关java.util.Date和java.time.LocalDateTime之间的转换,请参阅
Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
Java7及更早版本
使用的方法
正如你所看到的,你可以做很多操作。这里有一个例子,展示了你可以做什么
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
//Add one day to current date.
cal.add(Calendar.DATE, 1);
System.out.println(dateFormat.format(cal.getTime()));
//Substract one day to current date.
cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(dateFormat.format(cal.getTime()));
/* Can be Calendar.DATE or
* Calendar.MONTH, Calendar.YEAR, Calendar.HOUR, Calendar.SECOND
*/
只需使用此选项即可获得300天之前的日期,将300天替换为您的天数:
Date date = new Date(); // Or where ever you get it from
Date daysAgo = new DateTime(date).minusDays(300).toDate();
这里,
DateTime
isorg.joda.time.DateTime代码>
Date
是java.util.Date@JigarJoshi这是一个很好的答案,当然也是@Tim推荐使用的方法
我只想添加更多的可能性,从java.util.Date
中减去天数
阿帕奇公地
一种可能性是使用。您可以使用以下方法执行此操作:
Date dateBefore30Days = DateUtils.addDays(new Date(),-30);
当然,添加commons-lang
依赖项以仅执行日期减法可能不是一个好的选择,但是如果您已经在使用commons-lang
它是一个不错的选择。还有一些方便的方法可以addYears
,addMonths
,addWeeks
等等,请查看
爪哇8
另一种可能性是使用以下方法利用Java 8的新特性:
Java 8现在非常简单:
LocalDate date = LocalDate.now().minusDays(300);
可以找到新api的优秀指南。Java 8时间api:
Instant now = Instant.now(); //current date
Instant before = now.minus(Duration.ofDays(300));
Date dateBefore = Date.from(before);
我创建了一个函数来简化任务
- 日期字符串之后的7天:
dateCalculate(日期字符串,“yyyy-MM-dd”,7)代码>
- 要获得截至日期字符串的7天时间:
dateCalculate(日期字符串,“yyyy-MM-dd”,-7)代码>
您可以使用SimpleDateFormat轻松地使用日历进行减法
public static String subtractDate(String time,int subtractDay) throws ParseException {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);
cal.setTime(sdf.parse(time));
cal.add(Calendar.DATE,-subtractDay);
String wantedDate = sdf.format(cal.getTime());
Log.d("tag",wantedDate);
return wantedDate;
}
您还可以使用持续时间
类。例如
Date currentDate = new Date();
Date oneDayFromCurrentDate = new Date(currentDate.getTime() - Duration.ofDays(1).toMillis());
在Java 8中,可以执行以下操作:
Instant inst = Instant.parse("2018-12-30T19:34:50.63Z");
// subtract 10 Days to Instant
Instant value = inst.minus(Period.ofDays(10));
// print result
System.out.println("Instant after subtracting Days: " + value);
强制性的“使用Joda时间”备注。以下链接可能对您有用。[在此处输入链接说明][1][在此处输入链接说明][2][1]:[2]:[2]:仅供参考,像现在这样麻烦的旧日期时间类已被类所取代。@Jigar Joshi:我没有看到您的答案。。。我应该删除我的吗?仅供参考,像、java.text.simpleDataFormat
这样非常麻烦的旧日期时间类现在被java 8和更高版本中内置的类所取代。这是为了设置您的自定义DATEOTE,以防您不想考虑当前日期时间JAVA的数据处理如此臃肿!这是4年前的答案。对其最新版本进行了新的DateTime API更改。我将编辑answerFYI,诸如,和java.text.SimpleTextFormat
等麻烦的旧日期时间类现在被这些类取代。请参阅。@JigarJoshi如果您用Java8API更新了答案,那就太好了。您的答案是人们首先看到的公认答案。我建议始终将可选时区(或UTC的偏移量)传递到该方法。如果省略,JVM的当前默认时区将隐式且静默地应用。默认设置不在您的控制范围内,并且可以随时更改,即使在运行时也是如此。示例:LocalDate.now(ZoneId.of(“America/Montreal”)
。根据问题,需要位于任意日期对象上,而不是“now”我的意思一定是Java 8 API,而不是7。提及包Java.time
可能会有所帮助。此外,通常需要对堆栈溢出进行一些讨论/解释,而不仅仅是一段代码片段。您应该明确解释持续时间
,因为这是您的答案对.Java 8的附加值修改任意日期对象,而不是“现在”欢迎使用SO。请避免只使用代码的答案。请参阅。并请格式化您的代码。项目现在正在进行中,并建议迁移到类。此答案使用了麻烦的旧日期时间类,例如,和java.text.SimpleDataFormat
,它们现在已被类取代。请参阅。问题涉及日期时间对象,而不是生成字符串。顺便说一下,LocalDate.parse(“2017-01-23”)。plusWeeks(1)
比编写您自己的方法更简单,并且更加自我记录。使用LocalDateTime
没有任何意义,因为该类故意没有时区的概念,也没有UTC的偏移量。仅当区域/偏移量未知或不相关时才使用它。现在调用其时,使用LocalDate
并传递一个ZoneId
ode>方法。请参阅Jacob van Lingen的。@BasilBourque根据您的建议,我检查了api,您完全正确,因此我更新了答案。谢谢。希望评论:DateUtils
中不应该有任何s
,只是DateUtil
@OleV.V。Brian Montellano错了,您可以检查文档
c1.set(2017, 12 , 01); //Ex: 1999 jan 20 //System.out.println("Date is : " + sdf.format(c1.getTime()));
c1.add(Calendar.MONTH, -2); // substract 1 month
System.out.println
("Date minus 1 month : "
+ sdf.format(c1.getTime()));
public static String dateCalculate(String dateString, String dateFormat, int days) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat s = new SimpleDateFormat(dateFormat);
try {
cal.setTime(s.parse(dateString));
} catch (ParseException e) {
e.printStackTrace();
}
cal.add(Calendar.DATE, days);
return s.format(cal.getTime());
}
public static String subtractDate(String time,int subtractDay) throws ParseException {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);
cal.setTime(sdf.parse(time));
cal.add(Calendar.DATE,-subtractDay);
String wantedDate = sdf.format(cal.getTime());
Log.d("tag",wantedDate);
return wantedDate;
}
Date currentDate = new Date();
Date oneDayFromCurrentDate = new Date(currentDate.getTime() - Duration.ofDays(1).toMillis());
Instant inst = Instant.parse("2018-12-30T19:34:50.63Z");
// subtract 10 Days to Instant
Instant value = inst.minus(Period.ofDays(10));
// print result
System.out.println("Instant after subtracting Days: " + value);