package com.android.pc.util; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; /** * @ClassName: TimeHandler * @Description: 时间工具类 * @author 潘城 gdpancheng@gmail.com * @date 2012-6-27 上午9:48:35 * */ public class Handler_Time { private Calendar cal; private Handler_Time() { this.cal = Calendar.getInstance(); } public static Handler_Time getInstance() { return new Handler_Time(); } public static Handler_Time getInstance(String year, String month) { Handler_Time th = new Handler_Time(); if (year != null && !year.equals("") && !year.equals("null") && month != null && !month.equals("") && !month.equals("null")) { th.cal.set(Calendar.YEAR, Integer.parseInt(year)); th.cal.set(Calendar.MONTH, Integer.parseInt(month) - 1); } return th; } public static Handler_Time getInstance(String year, String month, String day) { Handler_Time th = new Handler_Time(); if (year != null && !year.equals("") && !year.equals("null") && month != null && !month.equals("") && !month.equals("null") && day != null && !day.equals("") && !day.equals("null")) { th.cal.set(Calendar.YEAR, Integer.parseInt(year)); th.cal.set(Calendar.MONTH, Integer.parseInt(month) - 1); th.cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day)); } return th; } /** * month is start with 1 * * @author LiuSong | mailto:liu@ezcom.net.cn | 2007/06/05 14:20:09 * @param year * @param month * @param day * @return */ public static Handler_Time getInstance(int year, int month, int day) { Handler_Time th = new Handler_Time(); th.cal.set(Calendar.YEAR, year); th.cal.set(Calendar.MONTH, month - 1); th.cal.set(Calendar.DAY_OF_MONTH, day); return th; } /** * @author 潘城 gdpancheng@gmail.com 2012-5-7 下午5:25:14 * @Title: getInstance * @Description: 根据TimeStamp格式的字符串来获得TimeHandler的实例<br> * 字符串格式可以为以下多种格式<br> * 年:2007<br> * 年月:2007-05<br> * 年月日:2007-05-08<br> * 年月日小时:2007-05-08 12<br> * 年月日小时分:2007-05-08 12:10<br> * 年月日小时分秒:2007-05-08 12:10:08 * @param @param date_time * @param @return 设定文件 * @return TimeHandler 返回类型 */ public static Handler_Time getInstance(String date_time) { int stringLength = date_time.length(); if (stringLength < 4) { return null; } Handler_Time th = new Handler_Time(); int year = Integer.parseInt(date_time.substring(0, 4)); int month = 0; int day = 1; if (stringLength >= 7) { month = Integer.parseInt(date_time.substring(5, 7)) - 1; } if (stringLength >= 10) { day = Integer.parseInt(date_time.substring(8, 10)); } // ------------------------------------------------------------ int hour = 0; int minute = 0; int second = 0; if (stringLength >= 13) { hour = Integer.parseInt(date_time.substring(11, 13)); } if (stringLength >= 16) { minute = Integer.parseInt(date_time.substring(14, 16)); } if (stringLength == 19) { second = Integer.parseInt(date_time.substring(17, 19)); } th.set(year, month, day, hour, minute, second); return th; } public static Handler_Time getInstance(long timeInMillis) { Handler_Time th = new Handler_Time(); th.set(timeInMillis); return th; } public Timestamp getTimestamp() { return new Timestamp(cal.getTimeInMillis()); } public String getTimestampStr() { String str = (new Timestamp(cal.getTimeInMillis())).toString(); while (str.length() < 23) { str += 0; } return str; } public String getTimestampSecond() { String str = (new Timestamp(cal.getTimeInMillis())).toString(); return str.substring(0, 19); } public Timestamp getTimestampPlus(long timeInMillis) { return new Timestamp(cal.getTimeInMillis() + timeInMillis); } public Timestamp getTimestamp(int year, int month, int day, int hour, int minute) { cal.set(year, month, day, hour, minute, 0); return new Timestamp(cal.getTimeInMillis()); } public int getYear() { return cal.get(Calendar.YEAR); } /** * @author 潘城 gdpancheng@gmail.com 2012-5-7 下午5:25:43 * @Title: getYearSimple * @Description: 获得年的后两位数字<br> * 例如,2008获得8,1998获得98<br> * @param @return 设定文件 * @return int 返回类型 */ public int getYearSimple() { int year = cal.get(Calendar.YEAR); int yearSimple; if (year > 2000) { yearSimple = year - 2000; } else if (year > 1900) { yearSimple = year - 1900; } else if (year > 1800) { yearSimple = year - 1800; } else { yearSimple = year - 1700; } return yearSimple; } /** * 获得年的后两位数字的字符串<br> * 例如,2008获得08,1998获得98<br> * * @return */ public String getYearSimpleStr() { int year = getYearSimple(); return Handler_String.addPrefixZero(year); } public int getYearPrev() { if (this.getMonth() == 1) { return this.getYear() - 1; } else { return this.getYear(); } } public int getYearNext() { if (this.getMonth() == 12) { return this.getYear() + 1; } else { return this.getYear(); } } public String getYearStr() { return String.valueOf(this.getYear()); } public int getMonth() { return cal.get(Calendar.MONTH) + 1; } public int getMonthPrev() { if (this.getMonth() == 1) { return 12; } else { return this.getMonth() - 1; } } public int getMonthNext() { if (this.getMonth() == 12) { return 1; } else { return this.getMonth() + 1; } } public String getMonthStr() { return Handler_String.addPrefixZero(this.getMonth()); } public int getDay() { return cal.get(Calendar.DAY_OF_MONTH); } public String getDayStr() { return Handler_String.addPrefixZero(this.getDay()); } public int getHour() { return cal.get(Calendar.HOUR_OF_DAY); } public String getHourStr() { return Handler_String.addPrefixZero(this.getHour()); } public int getMinute() { return cal.get(Calendar.MINUTE); } public String getMinuteStr() { return Handler_String.addPrefixZero(this.getMinute()); } public int getSecond() { return cal.get(Calendar.SECOND); } public String getSecondStr() { return Handler_String.addPrefixZero(this.getSecond()); } /** * 获得TimeStamp格式的年月日字符串<br> * 例:2007-05-08 * * @return */ public String getYYYYMMDD() { StringBuffer sbf = new StringBuffer(); sbf.append(this.getYearStr()); sbf.append("-"); sbf.append(this.getMonthStr()); sbf.append("-"); sbf.append(this.getDayStr()); return sbf.toString(); } /** * 获得中日文的年月日字符串<br> * 例:2007年05月08日 * * @return */ public String getYYYYMMDDLabel() { StringBuffer sbf = new StringBuffer(); sbf.append(this.getYearStr()).append("年"); sbf.append(this.getMonthStr()).append("月"); sbf.append(this.getDayStr()).append("日"); return sbf.toString(); } /** * 获得前一天的TimeStamp格式的年月日字符串<br> * 例:2007-05-08 * * @return */ public String getYYYYMMDDPrevious() { Handler_Time previousDay = getTimeHandlerPrevious(); return previousDay.getYYYYMMDD(); } /** * 获得后一天的TimeStamp格式的年月日字符串<br> * 例:2007-05-08 * * @return */ public String getYYYYMMDDNext() { Handler_Time nextDay = getTimeHandlerNext(); return nextDay.getYYYYMMDD(); } /** * 获得前一天的TimeHandler实例<br> * * @return */ public Handler_Time getTimeHandlerPrevious() { long todayTimeInMillis = this.getTimeInMillis(); Handler_Time previousDay = Handler_Time.getInstance(todayTimeInMillis - 24 * 3600 * 1000l); return previousDay; } /** * 获得后一天的TimeHandler实例<br> * * @return */ public Handler_Time getTimeHandlerNext() { long todayTimeInMillis = this.getTimeInMillis(); Handler_Time nextDay = Handler_Time.getInstance(todayTimeInMillis + 24 * 3600 * 1000l); return nextDay; } /** * 获得TimeStamp格式的年月字符串<br> * 例:2007-05 * * @return */ public String getYYYYMM() { StringBuffer sbf = new StringBuffer(); sbf.append(this.getYearStr()); sbf.append("-"); sbf.append(this.getMonthStr()); return sbf.toString(); } /** * 获得中日文的年月字符串<br> * 例:2007年05月 * * @return */ public String getYYYYMMLabel() { StringBuffer sbf = new StringBuffer(); sbf.append(this.getYearStr()).append("年"); sbf.append(this.getMonthStr()).append("月"); return sbf.toString(); } /** * 获得前一个月的TimeStamp格式的年月字符串<br> * 例:2007-05 * * @return */ public String getYYYYMMPrevious() { int year = this.getYear(); int previousMonth = getMonthPrev(); if (previousMonth == 12) { year = year - 1; } StringBuffer sbf = new StringBuffer(); sbf.append(year).append("-").append(Handler_String.addPrefixZero(previousMonth)); return sbf.toString(); } /** * 获得下一个月的TimeStamp格式的年月字符串<br> * 例:2007-05 * * @return */ public String getYYYYMMNext() { int year = this.getYear(); int nextMonth = getMonthNext(); if (nextMonth == 1) { year = year + 1; } StringBuffer sbf = new StringBuffer(); sbf.append(year).append("-").append(Handler_String.addPrefixZero(nextMonth)); return sbf.toString(); } public String getYyyyMmKanji() { StringBuffer sbf = new StringBuffer(); sbf.append(this.getYearStr()); sbf.append(" 年 "); sbf.append(this.getMonth()); sbf.append(" 月 "); return sbf.toString(); } public void set(int year, int month, int day, int hour, int minute, int second) { cal.set(year, month, day, hour, minute, second); } public void set(int year, int month, int day, int hour, int minute) { cal.set(year, month, day, hour, minute, 0); } public void set(int field, int value) { cal.set(field, value); } public void set(long timeInMillis) { cal.setTimeInMillis(timeInMillis); } public long getTimeInMillis() { return cal.getTimeInMillis(); } /** * 获得UNIX_TIMESTAMP的秒的INT型数字的值<br> * 值的长度应该和MYSQL的UNIX_TIMESTAMP()函数的值的长度是一致的<br> * 例如:1196440210<br> * 例如:1246026128<br> * * @return UNIX_TIMESTAMP的秒的INT型数字的值 */ public int getTimeInSeconds() { return (int) (this.getTimeInMillis() / 1000); } public boolean checkDate(int year, int month, int day) { cal.set(year, month, 1); if (day > cal.getActualMaximum(Calendar.DAY_OF_MONTH)) { return true; } else { return false; } } /** * 获得当月的天数 * * @return */ public int getMaxDayOfTheMonth() { return cal.getActualMaximum(Calendar.DAY_OF_MONTH); } /** * * @return */ public int getDayOfTheWeek() { return cal.get(Calendar.DAY_OF_WEEK); } public Date getDate() { return new Date(this.getTimeInMillis()); } public Calendar getCalendar() { return cal; } public static String now() { return Handler_Time.getInstance().getTimestamp().toString().substring(0, 19); } public String getPeriodStr(long timeInMillis) { long result = 0; StringBuffer sbf = new StringBuffer(); // result = (timeInMillis / 1000) / 3600; if (result > 0) { sbf.append(Handler_String.addPrefixZero((int) result)).append(":"); timeInMillis = timeInMillis - result * 3600 * 1000; } else { sbf.append("00:"); } // result = (timeInMillis / 1000) / 60; if (result > 0) { sbf.append(Handler_String.addPrefixZero((int) result)).append(":"); timeInMillis = timeInMillis - result * 60 * 1000; } else { sbf.append("00:"); } // result = timeInMillis / 1000; sbf.append(Handler_String.addPrefixZero((int) result)); return sbf.toString(); } public static Handler_Time linuxTimeToWinTime(Handler_Time timeHandler) { int year = timeHandler.getYear(); int month = timeHandler.getMonth(); int day = timeHandler.getDay(); int hour = timeHandler.getHour(); int minute = timeHandler.getMinute(); int second = timeHandler.getSecond(); hour = hour + 8; timeHandler.set(year, month - 1, day, hour, minute, second); return timeHandler; } public String toString() { return this.getTimestampStr(); } public static String formatDate(int year, int month, int day) { StringBuffer sbf = new StringBuffer(); sbf.append(year); sbf.append("-"); sbf.append(Handler_String.addPrefixZero(month + 1)); sbf.append("-"); sbf.append(Handler_String.addPrefixZero(day)); return sbf.toString(); } public static String formatDuring(long mss) { long days = mss / (1000 * 60 * 60 * 24); long hours = (mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60); long minutes = (mss % (1000 * 60 * 60)) / (1000 * 60); long seconds = (mss % (1000 * 60)) / 1000; String time = ""; if (seconds != 0) { time = seconds + "秒"; } if (minutes != 0) { time = minutes + "分"+time; } if (hours != 0) { time = hours + "小时"+time; } if (days != 0) { time = days + "天"+time; } return time; } }