Use DateUtils.truncate()
to throw out all fields less
significant than the specified field. When a Date
is truncated to the Calendar.MONTH
field,
DateUtils.truncate( )
will return a
Date
object set to the first instance of the
month. The
day, hour, minute, second, and
millisecond field will each contain the minimum possible value for
that field. Example 1-9 truncates a date at the
month field and the hour field.
Example 1-9. Truncating a Date object at Calendar.MONTH
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.FastDateFormat; import org.apache.commons.lang.time.DateFormatUtils; FastDateFormat dtFormat = DateFormatUtils.ISO_DATETIME_FORMAT; Date now = new Date( ); Date truncatedMonth = DateUtils.truncate( now, Calendar.MONTH ); Date truncatedHour = DateUtils.truncate( now, Calendar.HOUR ); System.out.println( "Now: " + dtFormat.format( now ) ); System.out.println( "Truncated Month: " + dtFormat.format( truncatedMonth ) ); System.out.println( "Truncated Hour: " + dtFormat.format( truncatedHour ) );
Assuming that the current date is March 28, 2004, and the current time is 1:48 P.M., this example produces the following output:
Now: 2004-03-28T13:48:12 Truncated Month: 2004-03-01T00:00:00 Truncated Hour: 2004-03-28T13:00:00
If you want to associate every event that happened between 2 P.M. and
3 P.M. with the 2 P.M. hour, or every event that happened in a
particular year with the first instant of that year, you need to
truncate a Date
at a specified
Calendar
field. When a Date
is
truncated, it is rounded down; DateUtils.truncate()
is the equivalent of Math.floor( )
for
the Date
class. If it is 4:02 P.M. on October 31,
1975, a Date
object truncated at the
Calendar.HOUR
field will point to 4:00 P.M., and a
Date
truncated at the
Calendar.YEAR
field will point to the first
millisecond of the first minute, of the first hour, of the first day
of year 2005: January 01 2005: 12:00:00.000 A.M
.
DateUtils.truncate( )
can also be used to truncate
a date to the nearest DateUtils.SEMI_MONTH
.
Recipe 1.14 discusses
DateUtils.SEMI_MONTH
in more detail.
3.144.28.70