Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何从日期对象中减去X天?_Java_Date_Datetime_Calendar_Java.util.date - Fatal编程技术网

在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
is
org.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);