分类: Java
2008-07-18 12:54:15
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 有关时间操作的实用函数集合
*
* @author Quad(百全)
* @version 1.0
* @time 2007年09月18日03时37分40秒.359
* @attention 修改后,运行程序,取得当前时间,修改历史记录
* @history 1.2007年09月18日03时37分40秒.359 新建
*/
/**
* 在SimpleDateFormat的构造函数中指定模式,比如:
*
* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",Locale.SIMPLIFIED_CHINESE);
*
* 也可以获取时间格式的时候使用applyPattern函数临时指定:
* SimpleDateFormat sdf = new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);
* sdf.applyPattern("yyyy年MM月dd日_HH时mm分ss秒");
* String timeStr = sdf.format(new Date());
*
* 什么字符代表什么,这是j2se约定好的,设置模式的时候,我们可以使用约定好的字符加上任何我们想要的字符串。
*
* j2se对字符所代表的模式的约定列表如下:
*
* Letter Date or Time Component Presentation
* G Era designator Text
* y Year Year
* M Month in year Month
* w Week in year Number
* W Week in month Number
* D Day in year Number
* d Day in month Number
* F Day of week in month Number
* E Day in week Text
* a Am/pm marker Text
* H Hour in day (0-23) Number
* k Hour in day (1-24 Number
* K Hour in am/pm (0-11) Number
* h Hour in am/pm (1-12) Number
* m Minute in hour Number
* s Second in minute Number
* S Millisecond Number
* z Time zone General time zone
* Z Time zone RFC 822 time zone
*
* */
public class TimeUtils {
/**
* 将当前时间格式化成“yyyy年MM月dd日HH时mm分ss秒.SSS”
*
* @return 格式化后的当前时间
*/
public String getNowTime() {
return formatTime(null, null);
}
/**
* 得到当前时间的毫秒数
*
* @return 当前时间的毫秒数
*/
public long getCurrentMilliseconds() {
Calendar cal = Calendar.getInstance();
return cal.getTimeInMillis();
}
/**
* 将要格式化的时间格式成“yyyy年MM月dd日HH时mm分ss秒.SSS”
*
* @param originalTime
* 需要被格式化的时间
* @return 已格式化的时间
*/
public String formatTime(Date originalTime) {
return formatTime(originalTime, null);
}
/**
* 将当前时间格式化成指定格式
*
* @param format
* 指定格式
* @return 格式化后的当前时间
*/
public String formatTime(String format) {
return formatTime(null, format);
}
/**
* 格式化时间
*
* @param originalTime
* 需要被格式化的时间
* @param format
* 格式
* @return desttime 已格式化的时间
*/
public String formatTime(Date originalTime, String format) {
String destTime = null;
if (originalTime == null) {
originalTime = Calendar.getInstance().getTime();
}
if (format == null) {
format = "yyyy年MM月dd日HH时mm分ss秒.SSS";
}
// 设置时间格式
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
try {
// 格式化时间
destTime = dateFormat.format(originalTime);
} catch (Exception ex) {
System.out.println("格式化时间失败:");
System.out.println(ex.getMessage());
}
return destTime;
}
/**
* 计算两个时间之间相隔天数
*
* @param startDay
* 开始时间
* @param endDay
* 结束时间
* @return 两个时间之间相隔天数
*/
public int getIntervalDays(Calendar startDay, Calendar endDay) {
// 确保startday在endday之前
if (startDay.after(endDay)) {
Calendar cal = startDay;
startDay = endDay;
endDay = cal;
}
// 分别得到两个时间的毫秒数
long sl = startDay.getTimeInMillis();
long el = endDay.getTimeInMillis();
long ei = el - sl;
// 根据毫秒数计算间隔天数
return (int) (ei / (1000 * 60 * 60 * 24));
}
/**
* 计算两个时间之间相隔天数
*
* @param startDay
* 开始时间
* @param endDay
* 结束时间
* @return 两个时间之间相隔天数
*/
public int getIntervalDays(Date startDay, Date endDay) {
// 确保startday在endday之前
if (startDay.after(endDay)) {
Date cal = startDay;
startDay = endDay;
endDay = cal;
}
// 分别得到两个时间的毫秒数
long sl = startDay.getTime();
long el = endDay.getTime();
long ei = el - sl;
// 根据毫秒数计算间隔天数
return (int) (ei / (1000 * 60 * 60 * 24));
}
/**
* 精确计算两个时间之间相隔天数
*
* @param startDay
* 开始时间
* @param endDay
* 结束时间
* @return 两个时间之间相隔天数
*/
public int getDaysBetween(Calendar startDay, Calendar endDay) {
// 确保startday在endday之前
if (startDay.after(endDay)) {
java.util.Calendar swap = startDay;
startDay = endDay;
endDay = swap;
}
int days = endDay.get(Calendar.DAY_OF_YEAR)
- startDay.get(Calendar.DAY_OF_YEAR);
int y2 = endDay.get(Calendar.YEAR);
if (startDay.get(Calendar.YEAR) != y2) {
startDay = (Calendar) startDay.clone();
do {
// 得到当年的实际天数
days += startDay.getActualMaximum(Calendar.DAY_OF_YEAR);
startDay.add(Calendar.YEAR, 1);
} while (startDay.get(Calendar.YEAR) != y2);
}
return days;
}
/**
* Calendar转化为Date
*
* @param calendar
* Calendar对象
* @return Date对象
*/
public Date calendarToDate(Calendar calendar) {
Date date = calendar.getTime();
return date;
}
/**
* Date转化为Calendar
*
* @param date
* Date对象
* @return Calendar对象
*/
public Calendar dateToCalendar(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal;
}
/**
* 计算两个时间之间相隔毫秒数
*
* @param startTime
* 开始时间
* @param endTime
* 结束时间
* @return 相隔毫秒数
*/
public long getIntervalMilliseconds(Calendar startTime, Calendar endTime) {
// 确保startday在endday之前
if (startTime.after(endTime)) {
Calendar cal = startTime;
startTime = endTime;
endTime = cal;
}
// 分别得到两个时间的毫秒数
long sl = startTime.getTimeInMillis();
long el = endTime.getTimeInMillis();
return el - sl;
}
/**
* 计算两个时间之间相隔毫秒数
*
* @param startTime
* 开始时间
* @param endTime
* 结束时间
* @return 相隔毫秒数
*/
public long getIntervalMilliseconds(Date startTime, Date endTime) {
// 确保startday在endday之前
if (startTime.after(endTime)) {
Date cal = startTime;
startTime = endTime;
endTime = cal;
}
// 分别得到两个时间的毫秒数
long sl = startTime.getTime();
long el = endTime.getTime();
return el - sl;
}
/**
* 计算某一月份的最大天数
* @param year 年
* @param month 月
* @return 某一月份的最大天数
*/
public int maxDaysOfMonth(int year, int month) {
Calendar time = Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR, year);
time.set(Calendar.MONTH, month -1);// 注意,Calendar对象默认一月为0
int day = time.getActualMaximum(Calendar.DAY_OF_MONTH);// 本月份的天数
// 注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间
return day;
}
/**
* 主函数,测试本类
* @param args
*/
public static void main(String[] args) {
TimeUtils tu = new TimeUtils();
System.out.println("现在时间是 : " + tu.getNowTime());
String time = tu.getNowTime();
int year = Integer.parseInt(time.substring(0, 4));
int month = Integer.parseInt(time.substring(5, 7));
System.out.println(tu.maxDaysOfMonth(year, month));
}
}