JAVA日期处理类
原创
52cxy
04-03 21:20
阅读数:454
包含基本的日期处理函数:
import java.io.*; import java.util.*; import java.text.SimpleDateFormat; import java.text.DateFormat; import java.text.ParseException; public class CalendarUtil { private static SimpleDateFormat sdf = new SimpleDateFormat(); final static long[] lunarInfo = new long[] {0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0}; /** * 返回农历 y年的总天数 */ final public static int lYearDays(int y) { int i, sum = 348; for (i = 0x8000; i > 0x8; i >>= 1) { if ((lunarInfo[y - 1900] & i) != 0) sum += 1; } return (sum + leapDays(y)); } /** * 返回农历 y年闰月的天数 */ final public static int leapDays(int y) { if (leapMonth(y) != 0) { if ((lunarInfo[y - 1900] & 0x10000) != 0) return 30; else return 29; } else return 0; } /** * 返回农历 y年闰哪个月 1-12 , 没闰传回 0 */ final public static int leapMonth(int y) { return (int) (lunarInfo[y - 1900] & 0xf); } /** * 返回农历 y年m月的总天数 */ final public static int monthDays(int y, int m) { if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) return 29; else return 30; } /** * 返回农历 y年的生肖 */ final public static String AnimalsYear(int y) { final String[] Animals = new String[]{"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"}; return Animals[(y - 4) % 12]; } /** * 返回干支, 0=甲子 */ final public static String cyclicalm(int num) { final String[] Gan = new String[]{"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"}; final String[] Zhi = new String[]{"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"}; return (Gan[num % 10] + Zhi[num % 12]); } /** * 返回干支, 0=甲子 */ final public static String cyclical(int y) { int num = y - 1900 + 36; return (cyclicalm(num)); } public static String oracleDate(String inputDate) { if (inputDate == null || inputDate.equals("")) { return ""; } else { String dateFormat = "yyyy-mm-dd hh24:mi:ss"; StringBuffer temp = new StringBuffer(); temp.append("to_date('").append(inputDate).append("','").append(dateFormat) .append("')"); return temp.toString(); } } public static String oracleDateOther(String inputDate) { if (inputDate == null || inputDate.equals("")) { return ""; } else { String dateFormat = "yyyy-mm-dd hh24:mi:ss"; StringBuffer temp = new StringBuffer(); temp.append("to_date('").append(inputDate).append("','").append(dateFormat) .append("')"); return temp.toString(); } } public static Calendar getCalendar() { Calendar calendar = null; calendar = Calendar.getInstance(); Date trialTime = new Date(); calendar.setTime(trialTime); return calendar; } /** * 返回当前年 */ public static int getYear() { Calendar calendar = getCalendar(); return calendar.get(Calendar.YEAR); } /** * 返回当前月 */ public static String getMonth() { int m = getMonthInt(); String[] months = new String[]{ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}; if (m > 12) return "-1"; return months[m - 1]; } /** * 返回当前月 */ public static int getMonthInt() { Calendar calendar = getCalendar(); return 1 + calendar.get(Calendar.MONTH); } /** * 返回当前星期,返回值为"1", "2", "3","4", "5", "6","7"之一 */ public String getDay() { int x = getDayOfWeek(); String[] days = new String[]{ "1", "2", "3", "4", "5", "6", "7"}; if (x > 7) return "-1"; return days[x - 1]; } /** * 返回当前日期(建议采用此函数) * * @param strDateFormat --日期格式 * @return 指定格式的日期(字符型),失败则返回null * 如指定strDateFormat为yyyy-MM-dd,则返回10位日期值 * "yyyy-MM-dd HH:mm:ss" --DateUtil.getDate("yyyy-MM-dd HH:mm:ss") */ public final static String getDate(String strDateFormat) { if (strDateFormat == null) { return null; } java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(strDateFormat); return format.format(new java.util.Date()); } /** * 返回近七天的日期 */ public final static String[] getOneWeekDates(String currentDay) { String[] days = new String[7]; Calendar calendar = Calendar.getInstance(); try { Date date = new SimpleDateFormat("yyyyMMdd").parse(currentDay); calendar.setTime(date); calendar.add(GregorianCalendar.DAY_OF_YEAR, -8); } catch (Exception e) { e.printStackTrace(); } for (int i = 7; i > 0; i--) { calendar.add(GregorianCalendar.DAY_OF_YEAR, 1); days[7 - i] = new SimpleDateFormat("yyyyMMdd").format(calendar.getTime()); } return days; } /** * 返回前N天的日期 */ public final static String getLastNDates(String currentDay,int nDays) { Calendar calendar = Calendar.getInstance(); try { Date date = new SimpleDateFormat("yyyyMMdd").parse(currentDay); calendar.setTime(date); calendar.add(GregorianCalendar.DAY_OF_YEAR, -(nDays+1)); } catch (Exception e) { e.printStackTrace(); } return new SimpleDateFormat("yyyyMMdd").format(calendar.getTime()); } /** * 返回当前日期 * * @return 返回当前日期(字符型) * 日期格式:月/日/年 */ public static String getDate() { return getMonthInt() + "/" + getDayOfMonth() + "/" + getYear(); } /** * 返回当前时间 * * @return 返回当前时间(字符型) * 日期格式:时:分:秒 */ public static String getTime() { return getHour() + ":" + getMinute() + ":" + getSecond(); } /** * 返回当前时间是一月中的哪一天 * * @return 返回当前时间是一月中的哪一天(整型) */ public static int getDayOfMonth() { Calendar calendar = getCalendar(); return calendar.get(Calendar.DAY_OF_MONTH); } /** * 返回当前时间是一年中的哪一天 * * @return 返回当前时间是一年中的哪一天(整型) */ public static int getDayOfYear() { Calendar calendar = getCalendar(); return calendar.get(Calendar.DAY_OF_YEAR); } /** * 返回当前时间是一年中的哪个星期 * * @return 返回当前时间是一年中的哪个星期(整型) */ public static int getWeekOfYear() { Calendar calendar = getCalendar(); return calendar.get(Calendar.WEEK_OF_YEAR); } /** * 说明:获取当前时间是一月中的哪个星期 * * @return 返回当前时间是一月中的哪个星期(整型) */ public static int getWeekOfMonth() { Calendar calendar = getCalendar(); return calendar.get(Calendar.WEEK_OF_MONTH); } /** * 说明:获取当前时间是一周中的哪一天 * * @return 返回当前时间是一周中的哪一天(整型) */ public static int getDayOfWeek() { Calendar calendar = getCalendar(); return calendar.get(Calendar.DAY_OF_WEEK) - 1; } /** * 返回当前时间的小时数 * * @return 返回当前时间的小时(整型) */ public static int getHour() { Calendar calendar = getCalendar(); return calendar.get(Calendar.HOUR_OF_DAY); } /** * 返回当前时间的分钟数 * * @return 返回当前时间的分钟(整型) */ public static int getMinute() { Calendar calendar = getCalendar(); return calendar.get(Calendar.MINUTE); } /** * 返回当前时间的秒数 * * @return 返回当前时间的秒(整型) */ public static int getSecond() { Calendar calendar = getCalendar(); return calendar.get(Calendar.SECOND); } public static int getWeekInt() { Calendar calendar = getCalendar(); return 1 + calendar.get(Calendar.WEEK_OF_YEAR); } final public long[] Lunar(int y, int m)//传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 // .dayCyl5 .isLeap6 { final int[] year20 = new int[]{1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1}; final int[] year19 = new int[]{0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0}; final int[] year2000 = new int[]{0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1}; long[] nongDate = new long[7]; int i = 0, temp = 0, leap = 0; // Date baseDate = new Date(1900, 1, 31); Date baseDate = new Date(); DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); try { baseDate = (Date) formatter.parse("01/31/1900"); } catch (ParseException e) { e.printStackTrace(); } // baseDate. // Date objDate = new Date(y, m, 1); Date objDate = new Date(); formatter = new SimpleDateFormat("MM/dd/yyyy"); try { baseDate = (Date) formatter.parse("01/" + m + "/" + y); } catch (ParseException e) { e.printStackTrace(); } long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L; if (y < 2000) offset += year19[m - 1]; if (y > 2000) offset += year20[m - 1]; if (y == 2000) offset += year2000[m - 1]; nongDate[5] = offset + 40; nongDate[4] = 14; for (i = 1900; i < 2050 && offset > 0; i++) { temp = lYearDays(i); offset -= temp; nongDate[4] += 12; } if (offset < 0) { offset += temp; i--; nongDate[4] -= 12; } nongDate[0] = i; nongDate[3] = i - 1864; leap = leapMonth(i); //闰哪个月 nongDate[6] = 0; for (i = 1; i < 13 && offset > 0; i++) { // 闰月 if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i; nongDate[6] = 1; temp = leapDays((int) nongDate[0]); } else { temp = monthDays((int) nongDate[0], i); } //解除闰月 if (nongDate[6] == 1 && i == (leap + 1)) nongDate[6] = 0; offset -= temp; if (nongDate[6] == 0) nongDate[4]++; } if (offset == 0 && leap > 0 && i == leap + 1) { if (nongDate[6] == 1) { nongDate[6] = 0; } else { nongDate[6] = 1; --i; --nongDate[4]; } } if (offset < 0) { offset += temp; --i; --nongDate[4]; } nongDate[1] = i; nongDate[2] = offset + 1; return nongDate; } final public static long[] calElement(int y, int m, int d) // 传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6 { long[] nongDate = new long[7]; int i = 0, temp = 0, leap = 0; // Date baseDate = new Date(0, 0, 31); Date baseDate = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); try { baseDate = (Date) formatter.parse(d + "31/00/00"); } catch (ParseException e) { e.printStackTrace(); } // Date objDate = new Date(y - 1900, m - 1, d); Date objDate = new Date(); try { objDate = (Date) formatter.parse(d + "/" + (m - 1) + "/" + (y - 1900)); } catch (ParseException e) { e.printStackTrace(); } long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L; nongDate[5] = offset + 40; nongDate[4] = 14; for (i = 1900; i < 2050 && offset > 0; i++) { temp = lYearDays(i); offset -= temp; nongDate[4] += 12; } if (offset < 0) { offset += temp; i--; nongDate[4] -= 12; } nongDate[0] = i; nongDate[3] = i - 1864; leap = leapMonth(i); //闰哪个月 nongDate[6] = 0; for (i = 1; i < 13 && offset > 0; i++) { // 闰月 if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i; nongDate[6] = 1; temp = leapDays((int) nongDate[0]); } else { temp = monthDays((int) nongDate[0], i); } //解除闰月 if (nongDate[6] == 1 && i == (leap + 1)) nongDate[6] = 0; offset -= temp; if (nongDate[6] == 0) nongDate[4]++; } if (offset == 0 && leap > 0 && i == leap + 1) { if (nongDate[6] == 1) { nongDate[6] = 0; } else { nongDate[6] = 1; --i; --nongDate[4]; } } if (offset < 0) { offset += temp; --i; --nongDate[4]; } nongDate[1] = i; nongDate[2] = offset + 1; return nongDate; } public static String getchina(int day) { String a = ""; if (day == 10) return "初十"; int two = (int) ((day) / 10); if (two == 0) a = "初"; if (two == 1) a = "十"; if (two == 2) a = "廿"; if (two == 3) a = "卅"; int one = (int) (day % 10); switch (one) { case 1: a += "一"; break; case 2: a += "二"; break; case 3: a += "三"; break; case 4: a += "四"; break; case 5: a += "五"; break; case 6: a += "六"; break; case 7: a += "七"; break; case 8: a += "八"; break; case 9: a += "九"; break; } return a; } public static String getday(int y, int m, int d) { String result = ""; long[] l = calElement(y, m, d); String n = "";//月份 switch ((int) (l[1])) { case 1: n = "一"; break; case 2: n = "二"; break; case 3: n = "三"; break; case 4: n = "四"; break; case 5: n = "五"; break; case 6: n = "六"; break; case 7: n = "七"; break; case 8: n = "八"; break; case 9: n = "九"; break; case 10: n = "十"; break; case 11: n = "十一"; break; case 12: n = "十二"; break; } result = getchina((int) l[2]); if ((int) l[2] == 1) result = n + "月"; return result; } // 传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6 public static String run() { Calendar cld = Calendar.getInstance(); int year = cld.get(Calendar.YEAR); int month = cld.get(Calendar.MONTH) + 1; int day = cld.get(Calendar.DAY_OF_MONTH); String week = ""; long[] l = calElement(year, month, day); switch (cld.get(Calendar.DAY_OF_WEEK)) { case 1: week = "日"; break; case 2: week = "一"; break; case 3: week = "二"; break; case 4: week = "三"; break; case 5: week = "四"; break; case 6: week = "五"; break; case 7: week = "六"; break; } String n = ""; switch ((int) (l[1])) { case 1: n = "一"; break; case 2: n = "二"; break; case 3: n = "三"; break; case 4: n = "四"; break; case 5: n = "五"; break; case 6: n = "六"; break; case 7: n = "七"; break; case 8: n = "八"; break; case 9: n = "九"; break; case 10: n = "十"; break; case 11: n = "十一"; break; case 12: n = "十二"; break; } String a = "北京时间: " + year + "年" + month + "月" + day + "日<br/>星期" + week + " 农历" + n + "月" + getchina((int) (l[2])); String b = year + "年" + month + "月" + day + "日 星期" + week + " 农历" + n + "月" + getchina((int) (l[2])); return b; } public static String getFormatDate(String date, String fromFormat, String toFormat) { String dateStr = ""; try { dateStr = new SimpleDateFormat(toFormat).format(new SimpleDateFormat(fromFormat).parse(date)); } catch (Exception e) { e.printStackTrace(); } return dateStr; } public static long getLongTime(String date, String format) { long dateStr = 0; try { dateStr = Long.parseLong(new SimpleDateFormat("yyyymmdd").format(new SimpleDateFormat(format).parse(date))); } catch (Exception e) { e.printStackTrace(); } return dateStr; } //或测当前系统日期 public static String getCurrentSystemDate(String toFormat) { String dateStr = ""; try { dateStr = new SimpleDateFormat(toFormat).format(new Date()); } catch (Exception e) { e.printStackTrace(); } return dateStr; } /** * 将yyyymmdd日期字符串转化为date类型 * @param date yyyymmdd日期字符串 * @return yyyy-mm-dd 日期字符串 */ public static String getDateString(String date){ System.out.println(date.substring(0,4) + "-" + date.substring(4,6) + "-" + date.substring(6)); return date.substring(0,4) + "-" + date.substring(4,6) + "-" + date.substring(6); } /** * 将date类型转成传入格式的String * @param date * @param toFormat * @return String */ public static String getDateStringFormat(Date date,String toFormat) { if ((date == null) || (toFormat == null || "".equals(toFormat))){ return ""; } return new SimpleDateFormat(toFormat).format(date); } /** * 将String转换成Date * @param date * @param dateFormat * @return Date * @throws ParseException */ public static Date getDateFormat(String date,String dateFormat) throws ParseException { if ((date == null) || "".equals(date) || (dateFormat == null || "".equals(dateFormat))){ return new Date(); } DateFormat formatter = new SimpleDateFormat(dateFormat); return formatter.parse(date); } /** @param date @param pattern @return String */ public static synchronized String getDateFormat(java.util.Date date, String pattern) { synchronized (sdf) { String str = null; sdf.applyPattern(pattern); str = sdf.format(date); return str; } } /** @param strDate @param pattern @return java.util.Date */ public static synchronized Date parseDateFormat(String strDate, String pattern) { synchronized (sdf) { Date date = null; sdf.applyPattern(pattern); try { date = sdf.parse(strDate); } catch (Exception e) { } return date; } } /** *added by wang on 07/02/02 @param strDate 输入的字符串日期 @param patternInput 输入格式 @param pattenOutput 期待输出的格式 @return
共0条评论