import java
import java
/**
* 時間計算工具類
*/
public class Time {
/**
* 時間字段常量
*/
public final static int SECOND =
/**
* 時間字段常量
*/
public final static int MINUTE =
/**
* 時間字段常量
*/
public final static int HOUR =
/**
* 時間字段常量
*/
public final static int DAY =
/**
* 各常量允許的最大值
*/
private final int[] maxFields = {
/**
* 各常量允許的最小值
*/
private final int[] minFields = {
/**
* 默認的字符串格式時間分隔符
*/
private String timeSeparator =
/**
* 時間數據容器
*/
private int[] fields = new int[
/**
* 無參構造
*/
public Time() {
this(
}
/**
* 使用時
* @param hour 小時
* @param minute 分鐘
*/
public Time(int hour
this(
}
/**
* 使用時
* @param hour 小時
* @param minute 分鐘
* @param second 秒
*/
public Time(int hour
this(
}
/**
* 使用一個字符串構造時間<br/>
* Time time = new Time(
* @param time 字符串格式的時間
*/
public Time(String time) {
this(time
}
/**
* 使用天
* @param day 天
* @param hour 時
* @param minute 分
* @param second 秒
*/
public Time(int day
set(DAY
set(HOUR
set(MINUTE
set(SECOND
}
/**
* 使用一個字符串構造時間
* Time time = new Time(
* @param time 字符串格式的時間
*/
public Time(String time
if(timeSeparator != null) {
setTimeSeparator(timeSeparator);
}
String pattern = patternQuote(this
String matcher = new StringBuffer()
if(!time
throw new IllegalArgumentException(time +
+ this
}
String[] times = time
set(DAY
set(HOUR
set(MINUTE
set(SECOND
}
/**
* 設置時間字段的值
* @param field 時間字段常量
* @param value 時間字段的值
*/
public void set(int field
if(value < minFields[field]) {
throw new IllegalArgumentException(value +
}
fields[field] = value % (maxFields[field] +
// 進行進位計算
int carry = value / (maxFields[field] +
if(carry >
int upFieldValue = get(field +
set(field +
}
}
/**
* 獲得時間字段的值
* @param field 時間字段常量
* @return 該時間字段的值
*/
public int get(int field) {
if(field <
throw new IllegalArgumentException(field +
}
return fields[field];
}
/**
* 將時間進行
* @param time 需要加的時間
* @return 運算後的時間
*/
public Time addTime(Time time) {
Time result = new Time();
int up =
for (int i =
int sum = fields[i] + time
up = sum / (maxFields[i] +
result
}
return result;
}
/**
* 將時間進行
* @param time 需要減的時間
* @return 運算後的時間
*/
public Time subtractTime(Time time) {
Time result = new Time();
int down =
for (int i =
int difference = fields[i] + down;
if (difference >= time
difference
down =
} else {
difference += maxFields[i] +
down =
}
result
}
result
return result;
}
/**
* 獲得時間字段的分隔符
* @return
*/
public String getTimeSeparator() {
return timeSeparator;
}
/**
* 設置時間字段的分隔符(用於字符串格式的時間)
* @param timeSeparator 分隔符字符串
*/
public void setTimeSeparator(String timeSeparator) {
this
}
/**
* 正則表達式引用處理方法
*/
private String patternQuote(String s) {
int slashEIndex = s
if (slashEIndex ==
return
StringBuilder sb = new StringBuilder(s
sb
slashEIndex =
int current =
while ((slashEIndex = s
sb
current = slashEIndex +
sb
}
sb
sb
return sb
}
public String toString() {
DecimalFormat df = new DecimalFormat(
return new StringBuffer()
}
public int hashCode() {
final int PRIME =
int result =
result = PRIME * result + Arrays
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj
return false;
final Time other = (Time) obj;
if (!Arrays
return false;
}
return true;
}
}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25946.html