TL; DR
LocalDate.now( ZoneId.of( "America/Montreal" ) ) .minusDays( 90 )
java.time
Other answers are outdated here. The modern way is java.time classes.
LocalDate
The LocalDate
class represents a date value only without time and without a time zone.
The time zone is critical for determining the date. At any given moment, the date changes around the world by zone. For example, a few minutes after midnight in Paris, France is a new day, still "yesterday" in Montreal Quebec .
ZoneId z = ZoneId.of( "America/Montreal" ) ; LocalDate today = LocalDate.now( z ) ;
Then you can add or subtract days.
LocalDate ago090 = today.minusDays( 90 ) ; LocalDate ago120 = today.minusDays( 120 ) ; LocalDate ago160 = today.minusDays( 160 ) ;
To generate a string in the standard ISO 8601 format YYYY-MM-DD, call toString
. For other formats, do a Stack search for the DateTimeFormatter
class to see a lot of examples and discussions.
String output = ago120.toString() ;
About java.time
The java.time framework is built into Java 8 and later. These classes supersede the nasty old legacy datetime classes such as java.util.Date
, Calendar
and SimpleDateFormat
.
The Joda-Time project, now in maintenance mode , advises switching to java.time.
To learn more, see the Oracle Tutorial . And search for qaru for many examples and explanations. JSR 310 specification .
Where to get java.time classes?
- Java SE 8 and SE 9 and later
- Built in.
- Part of the standard Java API with integrated implementation.
- Java 9 adds some minor features and fixes.
- Java SE 6 and SE 7
- Android
The ThreeTen-Extra project extends java.time with additional classes. This project is a proof of possible future additions to java.time. Here you can find useful classes such as Interval
, YearWeek
, YearQuarter
and more .