Commons IOの中に,探してみればあった, DateUtils.
決して悪くはないが,JodaTimeがある以上無理して使うまでもないだろう..とは思うが,とりあえず私たちのツールボックスの内に加えておいて損はない,ということでご紹介.
とりあえず便利
DateUtilsのJavaDocはこちらのとおり.
とりあえず加減算可能なset シリーズ ( setDays(), setYears() etc. ), 面倒なCalendarのインスタンスを省略できるtoCalendar(), 指定したフィールド以下を0にセットするtruncate()あたりが一番役立つと考えられる.iterator()もカレンダーアプリ関連で役立つかもしれない.
サンプルコード
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import org.apache.commons.lang3.time.DateUtils;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.*;
public class DateUtilTest {
private Date date;
@Before
public void init() {
Calendar cal = Calendar.getInstance();
cal.set( Calendar.YEAR, 1980 );
cal.set( Calendar.MONTH, 0 );
cal.set( Calendar.DAY_OF_MONTH, 2 );
cal.set( Calendar.HOUR_OF_DAY, 5 );
cal.set( Calendar.MINUTE, 20 );
cal.set( Calendar.SECOND, 30 );
cal.set( Calendar.MILLISECOND, 790 );
date = cal.getTime();
}
@Test
public void testAddAndSubtract() {
Calendar cal = Calendar.getInstance();
cal.setTime( DateUtils.addDays( date, 4 ) );
assertThat( cal.get( Calendar.DAY_OF_MONTH ), is( 6 ) );
cal = Calendar.getInstance();
cal.setTime( DateUtils.addHours( date, 5 ) );
assertThat( cal.get( Calendar.HOUR_OF_DAY ), is( 10 ) );
cal = DateUtils.toCalendar( DateUtils.addMilliseconds( date, 25 ) );
assertThat( cal.get( Calendar.MILLISECOND ), is( 815 ) );
// subtract
cal = DateUtils.toCalendar( DateUtils.addYears( date, -10 ) );
assertThat( cal.get( Calendar.YEAR ), is( 1970 ) );
// truncate
assertThat( DateUtils.truncate( date, Calendar.DAY_OF_MONTH ).toString(), is( "Wed Jan 02 00:00:00 EST 1980" ) );
}
@Test
public void testIterator() {
Iterator<Calendar> iter = DateUtils.iterator( date, DateUtils.RANGE_MONTH_SUNDAY );
int i = 0;
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy/MM/dd" );
while( iter.hasNext() ) {
if( ++i == 10 ) break;
System.out.print( sdf.format(iter.next().getTime()) + " ");
}
}
}
0 件のコメント:
コメントを投稿