如何从今天的日期减去x天的天数

问题描述:

我需要计算90天,120天和160天的几个项目。我将如何编码? 我一直在查找java代码,但是当我为android开发时会引发错误。如何从今天的日期减去x天的天数

我需要采取今天的日期,减去x的天数,并让它的结果显示在屏幕上没有别的。由于

+2

你能更具体地了解产生它们的错误和代码吗? – ObscureRobot 2012-01-04 14:22:19

+0

[如何从使用Java日历的日期中减去X天?](http://*.com/questions/212321/how-to-subtract-x-days-from-a-date-using-java -calendar) – 2015-05-27 07:08:00

您应该使用Calendar类:

//Calendar set to the current date 
Calendar calendar=Calendar.getInstance(); 
//rollback 90 days 
calendar.add(Calendar.DAY_OF_YEAR, -90); 
//now the date is 90 days back 
Log.i("MyApp","90 days ago:"+calendar.getTime().toString()); 
+0

roll()正在添加到字段中,而不是减量。但这是不正确的,因为它不会改变更大的领域。请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html – nagylzs 2012-11-08 12:38:06

+0

你是对的。谢谢。将更新我的答案 – 2012-11-08 13:31:08

使用日历对象...

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DATE, -90); //etc 

您应该能够使用Calendar类来实现你想要什么:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

然后,您可以使用当前日期.add(Calendar.DAY_OF_YEAR, -90);等调用您的日历对象。

TL;博士

LocalDate.now(ZoneId.of("America/Montreal")) 
     .minusDays(90) 

java.time

其他的答案在这里已经过时。现代的方式是使用java.time类。

LocalDate

LocalDate类表示没有时间一天和不同时区的日期,唯一的价值。

时区对确定日期至关重要。对于任何特定的时刻,日期因地区而异。例如,Paris France午夜后几分钟是新的一天,而在Montréal Québec仍然是“昨天”。

ZoneId z = ZoneId.of("America/Montreal") ; 
LocalDate today = LocalDate.now(z) ; 

然后,您可以添加或减去天数。

LocalDate ago090 = today.minusDays(90) ; 
LocalDate ago120 = today.minusDays(120) ; 
LocalDate ago160 = today.minusDays(160) ; 

要产生YYYY-MM-DD的标准ISO 8601格式的字符串,调用toString。对于其他格式,请在DateTimeFormatter类中搜索Stack Overflow以查看许多示例和讨论。

String output = ago120.toString() ; 

关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代了日期时间类legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310

从何处获取java.time类?

ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuartermore