Common Java Cookbook

Edition: 0.19

Download PDF or Read on Scribd

Download Examples (ZIP)

1.15. Truncating Date Objects

1.15.1. Problem

You need to truncate a date to a calendar field.

1.15.2. Solution

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

1.15.3. Discussion

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.

1.15.4. See Also

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.


Creative Commons License
Common Java Cookbook by Tim O'Brien is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License.
Permissions beyond the scope of this license may be available at http://www.discursive.com/books/cjcook/reference/jakartackbk-PREFACE-1.html. Copyright 2009. Common Java Cookbook Chunked HTML Output. Some Rights Reserved.