如何从java中减去当前日期的n天?

Sen*_*mar 33 java date

我想在Java中减去当前日期的n天.

我怎么做?

Hou*_*ana 73

您不必使用日历.你可以玩时间戳:

Date d = initDate();//intialize your date to any date 
Date dateBefore = new Date(d.getTime() - n * 24 * 3600 * 1000 l ); //Subtract n days   
Run Code Online (Sandbox Code Playgroud)

更新 不要忘记在1000年底之前添加"l".

请考虑以下警告:

1000*60*60*24在闰秒,夏令时等情况下,向java日期添加毫秒将在很长一段时间内向原始日期添加零天或两天.如果您需要100%确定只添加一天,则此解决方案不是使用的解决方案.

  • 如果`n`很大(> 24),你需要确保将值评估为`long`,因为对于`int`,该值太大了 (12认同)
  • 干净的方式是@Korgen方式,而不是这个 (6认同)
  • 这种方式不处理夏令时.如果你越过时间变化的日期,则时间将偏离+ - 1小时. (4认同)
  • 小心,这可能不起作用,例如在处理傻瓜时:http://stackoverflow.com/a/1006388/32453 (3认同)

Kor*_*gen 49

这将减去当前日期的十天(在Java 8之前):

int x = -10;
Calendar cal = GregorianCalendar.getInstance();
cal.add( Calendar.DAY_OF_YEAR, x);
Date tenDaysAgo = cal.getTime();
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Java 8,则可以使用新的Date&Time API(http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html):

LocalDate tenDaysAgo = LocalDate.now().minusDays(10);
Run Code Online (Sandbox Code Playgroud)

要将新类型转换为旧类型,反之亦然,请参阅:在java.time.LocalDateTime和java.util.Date之间进行转换

  • 谢谢Korgen !!! (2认同)

Pra*_*ani 6

我找到了这个完美的解决方案并且可能很有用,您可以直接获取您想要的格式:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -90); // I just want date before 90 days. you can give that you want.

SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); // you can specify your format here...
Log.d("DATE","Date before 90 Days: " + s.format(new Date(cal.getTimeInMillis())));
Run Code Online (Sandbox Code Playgroud)

谢谢.