TimeSpanクラスとはなんぞやというと
Date と Dateを比較した差分を保持するという単純なクラスです#
Calendarクラス使えばいいと思われますが
static final な fieldの定義とか結構めんどくさい
TimeSpanクラスで7日の差分を定義すると
public static final TimeSpan TIMESPAN = TimeSpan.Days(7);
で現在と差分を足したDateを求めるには、
Date date = TIMESPAN.getDate(new Date());
とすればいい。
何に利用するかというと主に
Memcachedに渡すExpireの 定義とかです。
Memcached.get(key, new Memgetable<String>() {
public String get() {
return value;
}
}, TIMESPAN.getDate(new Date()));
こんな風に記述ができます。
TimeSpan.java : stackoverflowを参照したような…参照元は失念
import java.util.Date;
import org.apache.commons.lang3.time.DateUtils;
public class TimeSpan {
private int millis;
public TimeSpan(int millis) {
this.millis = millis;
}
public TimeSpan(Date source, Date dest){
millis = (int)(dest.getTime() - source.getTime());
}
private TimeSpan() {
}
public int getDays() {
return this.getTotalHours() / 24;
}
public int getTotalHours() {
return this.getTotalMinutes() / 60;
}
public int getTotalMinutes() {
return this.getTotalSeconds() / 60;
}
public int getTotalSeconds() {
return (int) (this.millis / 1000);
}
public long getTotalMillis() {
return this.millis;
}
public TimeSpan addDays(int days) {
return addHours(days * 24);
}
public TimeSpan addHours(int hours) {
return addMinutes(hours * 60);
}
public TimeSpan addMinutes(int minutes) {
return addSeconds(minutes * 60);
}
public TimeSpan addSeconds(int seconds) {
return addMillis(seconds * 1000);
}
public TimeSpan addMillis(int millis) {
this.millis += millis;
return this;
}
public Date getDate() {
return new Date(this.millis);
}
public Date getDate(Date currentDate) {
return DateUtils.addMilliseconds(currentDate, millis);
}
public static TimeSpan Days(int days) {
return new TimeSpan().addDays(days);
}
public static TimeSpan Hours(int hours) {
return new TimeSpan().addHours(hours);
}
public static TimeSpan Minutes(int minutes) {
return new TimeSpan().addMinutes(minutes);
}
public static TimeSpan Seconds(int seconds) {
return new TimeSpan().addSeconds(seconds);
}
public static TimeSpan Millis(int millis){
return new TimeSpan(millis);
}
public static TimeSpan Span(Date source, Date dest){
return new TimeSpan((int)(dest.getTime() - source.getTime()));
}
}
TODO:TimeSpan同士の比較
追記
2014/01/23 Java 8でのDurationによる代替方法→ここ
0 件のコメント:
コメントを投稿