package com.walker.infrastructure.utils; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; /** * 类名称:长整形日期类 类描述:组合Calender,封装Calender的数字接口和方法 * * 编 写 人: 编写日期:2002年11月16日10时52分 * * * 修 改 人:祝捷 修改日期:2002年11月29日20时50分 修改内容:由于取得的月份是从00月到11月,所以在取得的当前月份再加一 才是实际的月份 * * 修 改 人:祝捷 修改日期:2002年12月14日16时50分 修改内容:在函数getLongTime中把时间转换为24小时制, */ public class LongCalendar { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); private static final SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd"); /** * 返回格式例如:20070728 * 名称:获得当前长整形日期方法 功能:获得系统中使用长整形表示的日期 输入参数: 返回参数:long:表示的日期长整形值 */ public static long getLongCalendar() { try { long longCalendar = 0; // 获得当前日期 Calendar cldCurrent = Calendar.getInstance(); // 获得年月日 String strYear = String.valueOf(cldCurrent.get(Calendar.YEAR)); String strMonth = String.valueOf(cldCurrent.get(Calendar.MONTH)); String strDate = String.valueOf(cldCurrent.get(Calendar.DATE)); // 整理格式 if (strMonth.length() < 2) { strMonth = "0" + strMonth; } if (strDate.length() < 2) { strDate = "0" + strDate; } // 组合结果 longCalendar = Long.parseLong(strYear + strMonth + strDate); // 系统默认月份加一 longCalendar += 100L; // 创建上初始化上下文环境并返回 return longCalendar; } catch (Exception Exp) { return 0; } } /** * 把数值转换成带格式的日期,默认为"/" * @param canlendar * @return */ public static String toString(long canlendar) { return LongCalendar.toString(canlendar, "/"); } public static String toString(long canlendar, String separator) { try { if (canlendar == 0) { return ""; } StringBuffer sbCalendar = new StringBuffer(); sbCalendar.insert(0, canlendar); // 整理格式 if (sbCalendar.length() == 8) { sbCalendar.insert(6, separator); sbCalendar.insert(4, separator); } else if (sbCalendar.length() == 14) { sbCalendar.insert(12, ":"); sbCalendar.insert(10, ":"); sbCalendar.insert(8, " "); sbCalendar.insert(6, separator); sbCalendar.insert(4, separator); } else { // 错误处理 return ""; } // 返回格式化好的整形日期的字符串格式 return sbCalendar.toString(); } catch (Exception Exp) { // 错误处理 return ""; } } /** * 类名称:长整形时间类 类描述:组合Calender,封装Calender的数字接口和方法 * * 编 写 人:张显达 编写日期:2002年12月12日20时52分 * */ public static long getLongTime() { try { long longCalendar = 0; // 获得当前日期 Calendar cldCurrent = Calendar.getInstance(); // 获得年月日 String strYear = String.valueOf(cldCurrent.get(Calendar.YEAR)); String strMonth = String .valueOf(cldCurrent.get(Calendar.MONTH) + 1); String strDate = String.valueOf(cldCurrent.get(Calendar.DATE)); String strHour = String.valueOf(cldCurrent.get(Calendar.HOUR)); String strAM_PM = String.valueOf(cldCurrent.get(Calendar.AM_PM)); String strMinute = String.valueOf(cldCurrent.get(Calendar.MINUTE)); String strSecond = String.valueOf(cldCurrent.get(Calendar.SECOND)); // 把时间转换为24小时制 // strAM_PM=="1",表示当前时间是下午,所以strHour需要加12 if (strAM_PM.equals("1")) { strHour = String.valueOf(Long.parseLong(strHour) + 12); } // 整理格式 if (strMonth.length() < 2) { strMonth = "0" + strMonth; } if (strDate.length() < 2) { strDate = "0" + strDate; } if (strHour.length() < 2) { strHour = "0" + strHour; } if (strMinute.length() < 2) { strMinute = "0" + strMinute; } if (strSecond.length() < 2) { strSecond = "0" + strSecond; } // 组合结果 longCalendar = Long.parseLong(strYear + strMonth + strDate + strHour + strMinute + strSecond); // 创建上初始化上下文环境并返回 return longCalendar; } catch (Exception Exp) { return 0; } } /** * 类名称:由长整型时间变为字符 类描述:通过长整数变为时间格式,可以自动适应8位或16位(格式:2002年12月13日10时25分) * * 编 写 人: 编写日期:2002年12月13日10时25分 * */ public static String getDateStringByLongDatetime(long longCalendar) { try { String StrCalendar = String.valueOf(longCalendar); String StrCalendarResult = ""; // 判断为日期型 if (StrCalendar.length() == 8) { StrCalendarResult = StrCalendar.substring(0, 4) + "年" + StrCalendar.substring(4, 6) + "月" + StrCalendar.substring(6, 8) + "日"; return StrCalendarResult; } // 判断为日期及时间型 if (StrCalendar.length() == 14) { StrCalendarResult = StrCalendar.substring(0, 4) + "年" + StrCalendar.substring(4, 6) + "月" + StrCalendar.substring(6, 8) + "日"; StrCalendarResult = StrCalendarResult + " " + StrCalendar.substring(8, 10) + ":" + StrCalendar.substring(10, 12) + ":" + StrCalendar.substring(12, 14); return StrCalendarResult; } // 否则返回空字符 return ""; } catch (Exception e) { // 错误处理 e.printStackTrace(); return ""; } } public static String getDateStringByLongDatetimeForPage(long longCalendar) { try { String StrCalendar = String.valueOf(longCalendar); String StrCalendarResult = ""; // 判断为日期型 if (StrCalendar.length() == 8) { StrCalendarResult = StrCalendar.substring(0, 4) + "/" + StrCalendar.substring(4, 6) + "/" + StrCalendar.substring(6, 8); return StrCalendarResult; } // 判断为日期及时间型 if (StrCalendar.length() == 14) { StrCalendarResult = StrCalendar.substring(0, 4) + "/" + StrCalendar.substring(4, 6) + "/" + StrCalendar.substring(6, 8); StrCalendarResult = StrCalendarResult + " " + StrCalendar.substring(8, 10) + ":" + StrCalendar.substring(10, 12); return StrCalendarResult; } // 否则返回空字符 return ""; } catch (Exception e) { // 错误处理 e.printStackTrace(); return ""; } } /** * 编写人:刘琨 名称:getCurrentDate 功能:得到系统当前时间 输入参数: 返回参数:String:系统当前时间 */ public static String getCurrentDate() { return getDateStringByLongDatetimeForPage(getLongCalendar()); } /** * * @说明:由日期的字符串形式得到八位数的长整形数字格式. 功能:由日期的字符串形式得到八位数的长整形数字格式. * @author 李彬 * @date 2007-4-14 * @param strCalender * @param strFGF * @return */ public static long longCalender(String strCalender, String strFGF) { long longCal = 0; try { if (!(strCalender == null || strCalender.equals(""))) { String[] calendars = strCalender.split(strFGF); if (calendars.length == 3) { String strYear = calendars[0]; String strMon = calendars[1]; String strDay = calendars[2]; if (strMon.length() == 1) { strMon = "0" + strMon; } if (strDay.length() == 1) { strDay = "0" + strDay; } longCal = Long.parseLong(strYear + strMon + strDay); } } else { return 0; } } catch (Exception ex) { return 0; } return longCal; } /** * @说明:由日期的字符串形式得到14位数的长整形数字格式. * 功能:由日期的字符串形式得到八位数的长整形数字格式:2012-07-13 00:00:00 to 20070414000000. * @author 高冬冬 * @date 2012-07-13 * @param strCalender 日历字符串 * @return */ public static long toLongCalendar(String strCalender, String strFGF){ long longCal = 0; try { if (!(strCalender == null || strCalender.equals(""))) { strCalender = strCalender.replace(" ", "").replace(":", ""); String[] calendars = strCalender.split(strFGF); if (calendars.length == 3) { String strYear = calendars[0]; String strMon = calendars[1]; String strDay = calendars[2]; if (strMon.length() == 1) { strMon = "0" + strMon; } if (strDay.length() == 7) { strDay = "0" + strDay; } longCal = Long.parseLong(strYear + strMon + strDay); } } else { return 0; } } catch (Exception ex) { return 0; } return longCal; } /** * 编写人:张显达 名称:getCurrentDateView 功能:得到系统当前时间显示,格式:yyyy/mm/dd主要是为页面显示用 输入参数: * 返回参数:String:系统当前时间 */ public static String getCurrentDateView() { // 获得当前日期 Calendar cldCurrent = Calendar.getInstance(); // 获得年月日 String strYear = String.valueOf(cldCurrent.get(Calendar.YEAR)); String strMonth = String.valueOf(cldCurrent.get(Calendar.MONTH) + 1); String strDate = String.valueOf(cldCurrent.get(Calendar.DATE)); // 整理格式 if (strMonth.length() < 2) { strMonth = "0" + strMonth; } if (strDate.length() < 2) { strDate = "0" + strDate; } // 得出当天日期的字符串 String StrCurrentCalendar = strYear + "/" + strMonth + "/" + strDate; return StrCurrentCalendar; } private static final String FILE_SEPARATOR = "/"; /** * 返回当前年月路径字符串,如:2014/3/ * @return */ public static final String getCurrentMonth(){ Calendar cldCurrent = Calendar.getInstance(); return new StringBuilder().append(cldCurrent.get(Calendar.YEAR)) .append(FILE_SEPARATOR) .append((cldCurrent.get(Calendar.MONTH) + 1)) .append(FILE_SEPARATOR).toString(); } /** * 编写人:张显达 名称:getCurrentDateView 功能:得到系统当前时间显示,格式:yyyy/mm/dd主要是为页面显示用 * 输入参数:long longCalendar 返回参数:String:系统当前时间 */ public static String getCurrentDateView(long longCalendar) { if (longCalendar == 0) { return ""; } String strDateView = String.valueOf(longCalendar); // 获得年月日 String strYear = strDateView.substring(0, 4); String strMonth = strDateView.substring(4, 6); String strDate = strDateView.substring(6, 8); // 整理格式 if (strMonth.length() < 2) { strMonth = "0" + strMonth; } if (strDate.length() < 2) { strDate = "0" + strDate; } // 得出当天日期的字符串 String StrCurrentCalendar = strYear + "/" + strMonth + "/" + strDate; return StrCurrentCalendar; } /** * 类名称:addMonth 类描述:通过参数日期及要加得月份得到一端时间后得时间 * * 编 写 人: 编写日期:2002年11月16日10时52分 * * 修 改 人: 修改日期: 修改内容: * * 版本: * * 目前不是很完善,需要进行修改 * */ public static long addMonth(long calendar, int month) { try { long longDate = 0; if (!checkCalendar(calendar)) { return -1; } int intYear = Integer.parseInt(String.valueOf(calendar).substring( 0, 4)); int intMonth = Integer.parseInt(String.valueOf(calendar).substring( 4, 6)) - 1; int intDate = Integer.parseInt(String.valueOf(calendar) .substring(6)); GregorianCalendar gCalendar = new GregorianCalendar(intYear, intMonth, intDate); gCalendar.add(GregorianCalendar.MONTH, month); longDate = gCalendar.get(GregorianCalendar.YEAR) * 10000L + (gCalendar.get(GregorianCalendar.MONTH) + 1) * 100L + gCalendar.get(GregorianCalendar.DATE); return longDate; } catch (Exception Exp) { return -1; } } // 目前不是很完善,需要进行修改 public static boolean checkCalendar(long calendar) { try { return true; } catch (Exception Exp) { return false; } } /** * 类名称:由长整型时间变为字符 类描述:通过长整数变为时间格式,输入参数为6位的时间 * * 编 写 人:左靖宇 编写日期:2003年3月6日 * */ public static String getTimeStringByLongTime(long longCalendar) { return getTimeStringByLongTime(longCalendar, true); } public static String getTimeStringByLongTime(long longCalendar, boolean formatCn) { try { String StrCalendar = String.valueOf(longCalendar); // String StrCalendarResult = ""; // 判断为时间型 if (StrCalendar.length() == 6) { StringBuilder s = new StringBuilder(StrCalendar.substring(0, 2)); if(formatCn) s.append("时"); else s.append(":"); s.append(StrCalendar.substring(2, 4)); if(formatCn) s.append("分"); else s.append(":"); s.append(StrCalendar.substring(4, 6)); if(formatCn) s.append("秒"); // StrCalendarResult = StrCalendar.substring(0, 2) + ":" // + StrCalendar.substring(2, 4) + ":" // + StrCalendar.substring(4, 6); return s.toString(); } else throw new RuntimeException("请输入6位数的日期"); } catch (Exception e) { // 错误处理 e.printStackTrace(); throw new RuntimeException("转换日期格式错误: " + e.getMessage()); } } /** * 类名称:月份增加 类描述:月份增加 * * 编 写 人:左靖宇 编写日期: * */ public static long getCalendarByMonthAdd(long longCalendar, int num) { try { // SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Date date = sdf.parse(Long.toString(longCalendar), new ParsePosition(0)); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, num); return Long.parseLong(sdf.format(calendar.getTime())); } catch (Exception e) { return -1; } } /** * 年份增加 * 编 写 人:彭业建 * * */ public static long getCalendarByYearAdd(long longCalendar, int num){ try { // SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Date date = sdf.parse(Long.toString(longCalendar)); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.YEAR, num); return Long.parseLong(sdf.format(calendar.getTime())); } catch (Exception e) { return -1; } } /** * 类名称:类描述:得到当前日期的格式化显示 * * 编 写 人:彭业建 编写日期: 返回参数 : yyyy年MM月dd日 */ public static String getCurrentDateForpage(){ return getDateStringByLongDatetime(getLongCalendar()); } /** * 类名称:getCalendarAfterDays 类描述:获得当前日期增加N天(可正可负)后的日期 * * 编 写 人:刘国军 编写日期: 返回参数 : yyyy/MM/dd */ public static String getCalendarAfterDays(int daysNumber) { // 定义日期格式i // SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); Calendar now = Calendar.getInstance(); now.add(Calendar.DATE, daysNumber); return sdf2.format(now.getTime()); } /** * * 说明:获得给定日期增加N天(可正可负)后的日期 作者:时克英 时间:2007-4-27 */ public static String getCalendarAfterDays(long longDate, int daysNumber) { Calendar calendar = Calendar.getInstance(); String strDate = String.valueOf(longDate); int year = Integer.parseInt(strDate.substring(0, 4)); int month = Integer.parseInt(strDate.substring(4, 6)) - 1; int day = Integer.parseInt(strDate.substring(6, 8)); calendar.set(year, month, day); calendar.add(Calendar.DATE, daysNumber); // SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); return sdf2.format(calendar.getTime()); } public static Date toDate(long longDate) { Calendar calendar = Calendar.getInstance(); String strDate = String.valueOf(longDate); int year = Integer.parseInt(strDate.substring(0, 4)); int month = Integer.parseInt(strDate.substring(4, 6)) - 1; int day = Integer.parseInt(strDate.substring(6, 8)); calendar.set(year, month, day); return calendar.getTime(); } public static Date toDateTime(long longDate) { Calendar calendar = Calendar.getInstance(); String strDate = String.valueOf(longDate); int year = Integer.parseInt(strDate.substring(0, 4)); int month = Integer.parseInt(strDate.substring(4, 6)) - 1; int day = Integer.parseInt(strDate.substring(6, 8)); int hour = Integer.parseInt(strDate.substring(8, 10)); int minute = Integer.parseInt(strDate.substring(10, 12)); int second = Integer.parseInt(strDate.substring(12, 14)); calendar.set(year, month, day, hour, minute, second); return calendar.getTime(); } public static String toTimeLineTime(long longDate) { SimpleDateFormat sdfDate = new SimpleDateFormat("MMM dd yyyy", Locale.ENGLISH); SimpleDateFormat sdfTime = new SimpleDateFormat("MMM dd yyyy HH:mm:ss", Locale.ENGLISH); String formatData; if (String.valueOf(longDate).length() > 8) { formatData = sdfTime.format(toDateTime(longDate)); } else { formatData = sdfDate.format(toDate(longDate)); } return formatData; } public static String toTimeLineTime(String strDate) { long longDate = Long.parseLong(strDate); SimpleDateFormat sdfDate = new SimpleDateFormat("MMM dd yyyy", Locale.ENGLISH); SimpleDateFormat sdfTime = new SimpleDateFormat("MMM dd yyyy HH:mm:ss", Locale.ENGLISH); String formatData; if (String.valueOf(longDate).length() > 8) { formatData = sdfTime.format(toDateTime(longDate)); } else { formatData = sdfDate.format(toDate(longDate)); } return formatData; } public static final String[] weekDefine = new String[] { "周日", "周一", "周二", "周三", "周四", "周五","周六" }; public static String toDayOfWeek(long longDate) { // String[] dayOfWeek = new String[] { "周日", "周一", "周二", "周三", "周四", "周五", // "周六" }; Calendar calendar = Calendar.getInstance(); String strDate = String.valueOf(longDate); int year = Integer.parseInt(strDate.substring(0, 4)); int month = Integer.parseInt(strDate.substring(4, 6)) - 1; int day = Integer.parseInt(strDate.substring(6, 8)); calendar.set(year, month, day); int index = calendar.get(Calendar.DAY_OF_WEEK) - 1; return weekDefine[index]; } /** * * 说明:返回当前日期是本周第几天 作者:时克英 时间:2007-4-23 */ public static int whichDayOfWeek(long longDate) { Calendar calendar = Calendar.getInstance(); String strDate = String.valueOf(longDate); int year = Integer.parseInt(strDate.substring(0, 4)); int month = Integer.parseInt(strDate.substring(4, 6)) - 1; int day = Integer.parseInt(strDate.substring(6, 8)); calendar.set(year, month, day); int whichDay = calendar.get(Calendar.DAY_OF_WEEK); if (whichDay == 1) { return 7; } else { return whichDay - 1; } } /** * 类名称:类描述:计算两个日期相差的天数,begin,end格式yyyMMdd * * 编 写 人:彭业建 编写日期: */ public static long getDays(String begin, String end){ try{ // SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd"); Date begin1 = sdf.parse(begin); Date end1 = sdf.parse(end); return (end1.getTime() - begin1.getTime()) / (24 * 60 * 60 * 1000); }catch(Exception ex){ return 0; } } /** * 类名称:类描述:计算日期加上或减去某个数后的日期 * 编 写 人:彭业建 编写日期 * @param date 要计算的日期 * @param amount,加或减的天数 * @return 计算后的日期 */ public static long getDateAfterAddDateNum(long date,int amount){ try{ // SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd"); Date begin= sdf.parse(String.valueOf(date)); Calendar currentDate=Calendar.getInstance(); currentDate.setTime(begin); currentDate.add(Calendar.DAY_OF_MONTH , amount); String dateStr=sdf.format(currentDate.getTime()); return Long.parseLong(dateStr); }catch(Exception ex){ return 0; } } /** * 根据输入的日期,返回所在周的第一天日期 * @param _cntDate * @return */ public static long getFirstDayOfWeek(long _cntDate){ int whichDay = LongCalendar.whichDayOfWeek(_cntDate); return LongCalendar.getDateAfterAddDateNum(_cntDate, - whichDay + 1); } /** * 返回本周最后一天 * @param _firstDate:本周第一天 * @return */ public static long getLastDayOfWeek(long _firstDate){ return LongCalendar.getDateAfterAddDateNum(_firstDate, 6); } protected static boolean isLeapYear(int year) { return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)); } public static int getLastDayOfMonth(int monthNum, int year) { switch (monthNum) { case 1: return 31; case 2: return (isLeapYear(year)) ? 29 : 28; case 3: return 31; case 4: return 30; case 5: return 31; case 6: return 30; case 7: return 31; case 8: return 31; case 9: return 30; case 10: return 31; case 11: return 30; case 12: return 31; default: throw new IllegalArgumentException("Illegal month number: " + monthNum); } } public static void main(String[] args) { /*System.out.println(getLongCalendar()); System.out.println(LongCalendar.getLongTime());*/ //long s=20070809L; //System.out.println(LongCalendar.getDateStringByLongDatetime(s)); String s= "2012/07/13 09:11:33"; System.out.println(LongCalendar.toLongCalendar(s, "/")); System.out.println(getTimeStringByLongTime(130529)); } }