`

日期处理

    博客分类:
  • java
SQL 
阅读更多


import java.sql.Timestamp;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * <DT><B></B>日期处理<DD>
 * <DT><B>概要:</B>日期处理方法集<DD>
 * <DT><B>说明:</B>日期串处理<DD>
 */
public class DateUtil {
 /** 构造函数 */
 public DateUtil() {
 }

 public static void main(String args[]) {
  /*Date nullDate = null;
   System.out.println("TODAY: " + DateUtil.showExpDate());
   System.out.println("TODAY: " + DateUtil.formatShortDate(new Date()));
   System.out.println("nullDAY: " + DateUtil.formatShortDate(nullDate));*/
 }

 public static Date getCurrentDate() {
  return new Date();
 }

 /**
  * 获取一天后对应的时间
  * @param ts 输入时间
  * @return ts 一天后时间
  */
 public static Timestamp getNextTime(Timestamp ts) {
  Timestamp newTs = new Timestamp(ts.getTime() + 86400000);
  return newTs;
 }

 /**
  * 获取某天后对应的时间
  * @param ts 输入时间
  * @param dayCount 天数
  * @return ts 一天后时间
  */
 public static Timestamp getNextTime(Timestamp ts, int dayCount) {
  Timestamp newTs = new Timestamp(ts.getTime() + 86400000 * dayCount);
  return newTs;
 }

 /** 说明: 日期转化为字符串(默认格式 yyyy-mm-dd hh24:mi:ss)
  *  @param  dt 日期
  *  @return dateString 转化后的字符串
  */
 public static String formatDate(Date dt) {
  return formatDate(dt, "yyyy-MM-dd HH:mm:ss");
 }
 
 /**
  * 说明: 日期转化为字符串(默认格式 yyyy-mm-dd hh24:mi)
  * @param dt
  * @return
  */
 public static String formatDateToSendDate(Date dt) {
  return formatDate(dt, "yyyy-MM-dd HH:mm");
 }

 /** 说明: 日期转化为字符串(默认格式 yyyy-mm-dd hh24:mi:ss)
  *  @param  ts 日期
  *  @return dateString 转化后的字符串
  */
 public static String formatDate(java.sql.Timestamp ts) {
  String dateString = "";
  if (ts != null) {
   Date dt = new Date(ts.getTime());
   dateString = formatDate(dt, "yyyy-MM-dd HH:mm:ss");
  }
  return dateString;
 }

 /** 说明: 日期转化为字符串(默认格式 yyyy-mm-dd)
  *  @param  dt 日期
  *  @return dateString 转化后的字符串
  */
 public static String formatShortDate(Date dt) {
  String dateString;
  if (dt == null) {
   dateString = "";
  } else {
   dateString = formatDate(dt, "yyyy-MM-dd");
  }
  return dateString;
 }

 /** 说明: 日期转化为字符串(默认格式 yyyy-mm-dd)
  *  @param  ts 日期
  *  @return dateString 转化后的字符串
  */
 public static String formatShortDate(java.sql.Timestamp ts) {
  String dateString;
  Date dt = new Date(ts.getTime());
  if (dt == null) {
   dateString = "";
  } else {
   dateString = formatDate(dt, "yyyy-MM-dd");
  }
  return dateString;
 }

 /**
  * 说明: 获取今天的时间,按 2001年1月10日 星期一格式
  * @return showExpDay 今天对应的时间
  */
 public static String showExpDate() {
  Date dt = new Date();
  String showExpDay;
  int dayOfWeek;
  showExpDay = formatDate(dt, "yyyy年MM月dd日 ");
  Calendar rightNow = Calendar.getInstance();
  dayOfWeek = rightNow.get(Calendar.DAY_OF_WEEK);
  System.out.println(dayOfWeek);
  showExpDay += getWeekName(dayOfWeek);
  return showExpDay;
 }

 /**
  * 说明: 获取当前月份的第一天,按 2001年1月10日格式
  * @return showFirstDayOfMonth 今天对应的时间
  */
 public static String showFirstDayOfMonth() {
  java.sql.Date temp = new java.sql.Date(new Date().getTime());
  String showFirstDayOfMonth;
  showFirstDayOfMonth = formatDate(temp, "yyyy-MM-");
  showFirstDayOfMonth += "01";
  return showFirstDayOfMonth;
 }

 /**
  * 说明: 获取当前月份的第31天,按 2001年1月10日格式
  * @return showFirstDayOfMonth 今天对应的时间
  */
 public static String showLastDayOfMonth() {
  java.sql.Date temp = new java.sql.Date(new Date().getTime());
  String showFirstDayOfMonth;
  showFirstDayOfMonth = formatDate(temp, "yyyy-MM-");
  showFirstDayOfMonth += "31";
  return showFirstDayOfMonth;
 }

 /**
  * 说明: 获取当前月份的第一天,按 2001年1月10日格式
  * @return showFirstDayOfMonth 今天对应的时间
  */
 public static String showCurrentDate() {
  java.sql.Date temp = new java.sql.Date(new Date().getTime());
  String showCurrentDate;
  showCurrentDate = formatDate(temp, "yyyy-MM-dd");
  return showCurrentDate;
 }

 /**
  * 说明: 获取输入日期中的年
  * @return showYear 年
  */
 public static String showYear(Date dt) {
  String showYear;
  showYear = formatDate(dt, "yyyy");
  return showYear;
 }

 /**
  * 说明: 获取输入日期中的月
  * @return showMonth 月
  */
 public static String showMonth(Date dt) {
  String showMonth;
  showMonth = formatDate(dt, "MM");
  return showMonth;
 }

 /**
  * 说明: 获取输入日期中的天
  * @return showDay 天
  */
 public static String showDay(Date dt) {
  String showDay;
  showDay = formatDate(dt, "dd");
  return showDay;
 }
 
 /**
  * 说明: 获取输入日期中的小时
  * @return showHour 小时(24)
  */
 public static String showHour(Date dt) {
  String showHour;
  showHour = formatDate(dt, "HH");
  return showHour;
 }
 
 /**
  * 说明: 获取输入日期中的分钟
  * @return showMinute 分钟
  */
 public static String showMinute(Date dt) {
  String showMinute;
  showMinute = formatDate(dt, "mm");
  return showMinute;
 }

 /** 说明: 日期转化为字符串
  *  @param  dt 日期
  *  @param  sf 日期格式化定义
  *  @return dateString 转化后的字符串
  */
 public static String formatDate(Date dt, String sf) {
  // Format the current time.
  SimpleDateFormat sdf = new SimpleDateFormat(sf);
  return sdf.format(dt);
 }

 /** 说明: 日期转化为字符串
  *  @param  ts 日期
  *  @param  sf 日期格式化定义
  *  @return dateString 转化后的字符串
  */
 public static String formatDate(java.sql.Timestamp ts, String sf) {
  String dateString = "";
  if (ts != null) {
   Date dt = new Date(ts.getTime());
   // Format the current time.
   SimpleDateFormat sdf = new SimpleDateFormat(sf);
   dateString = sdf.format(dt);
  }
  return dateString;
 }

 /** 说明: 日期转化为SQL字符串(默认格式 yyyy-mm-dd hh24:mi:ss)
  *  @param  dt 日期
  *  @return dateString 转化后的字符串
  */
 public static String formatDateSQL(Date dt) {
  String sqlString = formatDate(dt);
  sqlString = " to_date('" + sqlString + "', 'yyyy-mm-dd hh24:mi:ss') ";
  return sqlString;
 }

 /** 说明: 字符串转化为SQL字符串(默认格式 yyyy-mm-dd hh24:mi:ss)
  *  @param  dtString  日期字符串
  *  @return dateString 转化后的SQL字符串
  */
 public static String formatDateSQL(String dtString) {
  String sqlString;
  // 防止 2-29等日期溢出错误。
  Date dt;
  // 将提交的日期转化为JAVA日期
  dt = DateUtil.parseString(dtString, "yyyy-MM-dd");
  //将JAVA日期转化为提交的日期
  dtString = DateUtil.formatDate(dt, "yyyy-MM-dd");
  sqlString = " to_date('" + dtString + "', 'yyyy-mm-dd') ";
  return sqlString;
 }

 /** 说明: 字符串转化为SQL字符串
  *  @param  dtString  日期字符串
  *  @param  sf 数据库日期格式
  *  @return dateString 转化后的SQL字符串
  */
 public static String formatDateSQL(String dtString, String sf) {
  String sqlString;
  // 防止 2-29等日期溢出错误。
  Date dt;
  // 将提交的日期转化为JAVA日期
  dt = DateUtil.parseString(dtString, "yyyy-MM-dd");
  //将JAVA日期转化为提交的日期
  dtString = DateUtil.formatDate(dt, "yyyy-MM-dd");
  sqlString = " to_date('" + dtString + "', '" + sf + "') ";
  return sqlString;
 }

 /** 说明: 字符串转换为日期 (默认格式 yyyy-MM-dd)
  *  @param dateString 日期格式字符串
  *  @return 转换后的日期

  */
 public static Date parseString(String dateString) {
  String sf = "yyyy-MM-dd";
  Date dt = parseString(dateString, sf);
  return dt;
 }

 /** 说明: 使类似于2002-02-30这样的非法日期合法化。
  *  @param dateString 日期格式字符串
  *  @return 转换后的日期格式字符串
  */
 public static String secureString(String dateString) {
  if (dateString == null || dateString.equals(""))
   return "";
  String sf = "yyyy-MM-dd";
  SimpleDateFormat sdf = new SimpleDateFormat(sf);
  Date dt = parseString(dateString, sf);
  return sdf.format(dt);
 }

 /** 说明: 使类似于2002-02-30这样的非法日期合法化。
  *  @param dateString 日期格式字符串
  *  @return 转换后的日期格式字符串
  */
 public static String plusDays(String dateString, int toBePlus) {
  if (dateString == null || dateString.equals(""))
   return "";
  String sf = "yyyy-MM-dd";
  SimpleDateFormat sdf = new SimpleDateFormat(sf);
  Date dt = parseString(dateString, sf);
  dt.setDate(dt.getDate() + toBePlus);
  return sdf.format(dt);
 }

 /** 说明: 字符串转换为日期
  *  @param dateString 日期格式字符串
  *  @param  sf 日期格式化定义
  *  @return 转换后的日期
  */
 public static Date parseString(String dateString, String sf) {
  // Parse the previous string back into a Date.
  ParsePosition pos = new ParsePosition(0);
  // Format the current time.
  SimpleDateFormat sdf = new SimpleDateFormat(sf);
  Date dt = sdf.parse(dateString, pos);
  return dt;
 }

 /** 是否合法日期字符串 */
 private static boolean isValidDate;

 /** 说明: 是否合法日期
  *  @return 是否合法日期
  */
 public static boolean isValidDate() {
  return isValidDate;
 }

 /** 日期检查错误信息 */
 private static String errorMsg;

 /** 说明: 获取错误信息提示
  *  @return errorMsg 错误信息
  */
 public static String getErrorMsg() {
  return errorMsg;
 }

 /**
  * 说明: 获取当前时间
  * @return curTimestamp 当前时间
  */
 public static Timestamp getCurTime() {
  return new Timestamp(new java.util.Date().getTime());
 }

 /**
  * 说明: 获取星期几名称
  * @param weekNo 第几天
  * @return weekName 中文星期几
  */
 private static String getWeekName(int weekNo) {
  String[] weekNames = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
  String weekName = weekNames[weekNo - 1];
  return weekName;
 }

 /**
  * 返回新的日期类型
  * date :  原始日期
  * value : 须增加的值
  * VAR : 修改日期类型 比如: 修改分钟 小时 天 星期 月 年
  * 例如
  *     Calendar.DAY_OF_MONTH
  *     Calendar.DAY_OF_WEEK
  *     Calendar.DAY_OF_YEAR
  *     Calendar.HOUR_OF_DAY
  *     Calendar.MONDAY
  * @param date
  * @param value
  * @param modify
  * @return
  */
 public static Date getNewDate(Date date, int value, int VAR) {
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  int temp = cal.get(VAR);
  cal.set(VAR, temp + value);
  return cal.getTime();
 }

 /**
  * Return timestamp from string
  * Example : 2002-07-03 12:22:22
  * create by chuanyun tian
  * @param time
  * @return
  * @throws ParseException
  */
 public static Timestamp stringToTimestamp(String time) throws java.text.ParseException {
  java.text.SimpleDateFormat sdt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  Date date = sdt.parse(time);
  java.util.Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  return new Timestamp(cal.getTime().getTime());
 }

 /**
  *  If begindate is before of the todate, return true;
  *  otherwise return false
  * chaunyun tian
  * @param beginDate
  * @param toDate
  * @return
  */
 public static boolean compDate(Date beginDate, Date toDate) {
  if (beginDate.before(toDate))
   return true;
  return false;
 }

 /**
  * If system time is before of the compareDate, return true;
  * otherwise return false
  * chaunyun tian
  * @param compareDate
  * @return
  */
 public static boolean compNow(Date compareDate) {
  if ((new Date()).before(compareDate))
   return true;
  return false;
 }

 public static String stringToMySQL(String time) throws java.text.ParseException {
  java.text.SimpleDateFormat sdt = new SimpleDateFormat("MM/dd/yyyy");
  java.text.SimpleDateFormat sdt_after = new SimpleDateFormat("yyyy-MM-dd");
  Date date = sdt.parse(time);
  return sdt_after.format(date);
 }

 /**
  * Return timestamp from string
  * Example : 03/07/2002 12:22:22
  * create by chuanyun tian
  * @param time
  * @return
  * @throws ParseException
  */
 public static Timestamp strToTimestamp(String time) throws java.text.ParseException {
  java.text.SimpleDateFormat sdt = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
  Date date = sdt.parse(time);
  java.util.Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  return new Timestamp(cal.getTime().getTime());
 }

 /**
  * 返回新的日期类型
  * date : 原始日期长整形
  * value : 须增加的值
  * VAR : 修改日期类型 比如: 修改分钟 小时 天 星期 月 年
  * Calendar.DAY_OF_MONTH
  * Calendar.DAY_OF_WEEK
  * Calendar.DAY_OF_YEAR
  * Calendar.HOUR_OF_DAY
  * Calendar.MONDAY
  * @param date
  * @param value
  * @param modify
  * @return
  */
 public static long getNewDate(long date, int value, int VAR) {
  java.util.Date dd = new java.util.Date();
  dd.setTime(date);
  Calendar cal = Calendar.getInstance();
  cal.setTime(dd);
  int temp = cal.get(VAR);
  cal.set(VAR, temp + value);
  return cal.getTime().getTime();
 }

 /**
  * 得到取样时间
  * @return
  */
 public static Date getFetchDate(){
  Date date = new Date();
  Calendar rightNow = Calendar.getInstance();
  int dayOfWeek = rightNow.get(Calendar.DAY_OF_WEEK)-1;
  if(dayOfWeek==4||dayOfWeek==5){
   date = DateUtil.getNewDate(new java.util.Date(),4,Calendar.DATE);
  }else{
   date = DateUtil.getNewDate(new java.util.Date(),2,Calendar.DATE);
  }
  return date;
 }
 
 
 /**
  * 获取时间对应的名称
  * @param ts 时间
  * @return tname 时间名称
  */
 public static String getTimeName(Timestamp ts) {
  return null;
 }
 /**
  * 判断是否是闰年
  * @param year
  * @return
  */
 public static boolean isLeapYear(int year) {
  int residue = year%4;
  if (residue != 0)
   return false;
  else {
   residue = year%100;
   if (residue != 0)
    return true;
   else {
    residue = year%400;
    if (residue == 0)
     return true;
    else
     return false;
   }
  }
 }
 /**
  * 根据年份,月份得到当月最后一天
  * @param year
  * @param month
  * @return
  */
 public static int getDay(int year,int month) {
  int day = 1;
  switch(month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
         day = 31;
         break;
        case 4:
        case 6:
        case 9:
        case 11:
         day = 30;
         break;
        case 2:
         if (isLeapYear(year)) {
          day = 29;
         } else {
          day = 28;
         }
         break;
        default:
  }
  return day;
 }
 
 public static java.util.Date getFormatDate(String str,int type) {
  java.util.Date date = null;
  str = str.trim();
  str = str.replaceAll("o|O|o|O","0");
  str = str.replaceAll("良", "年");
  str = str.replaceAll("结业", "");
  str = str.replaceAll(" ", " ");
  str = str.replaceAll("_", "");
  str = str.replaceAll("—", "");
  str = str.replaceAll("E\\d+", "");
  str = str.replaceAll("…..", "");
  
  if ("".equals(str)) str = "无";
  //str = str.replaceAll("无", "");
  
  String str1 = ".*月份";
  String str2 = "\\s*[0-9]+\\s*";
  String str3 = "\\d{1,4}\\.(\\d{1,4}(\\.|月))?";
  String str4 = "\\s*\\d{1,4}\\s*年\\s*\\d{1,2}\\s*月";
  String str5 = "(\\d{1,4}[\\.|/]\\d{1,2})([\\.|/]\\d{1,2})?[\\s|-]+(\\d{1,4}[\\.|/]\\d{1,2})([\\.|/]\\d{1,2})?";
  String str6 = "\\d{1,4}[-|.|\\|/|,]\\d{1,2}[-|.|\\|/|,]?(\\d{1,2})?";
  String str7 = "\\d{1,2}/\\d{1,2}/\\d{1,4}";
  String str8 = "应届";
  String str9 = "(无|大专)";
  String str10 = "\\d{1,4}\\s*年\\s*";
  String str11 = ".*[-|—]\\s*[-|—].*";
  String str12 = "\\s*/\\s*";
  
  // 匹配 形如:"一月份"
  Pattern pattern = Pattern.compile(str1);
  Matcher matcher = pattern.matcher(str);
  /*// 匹配全数字
  Pattern pattern2 = Pattern.compile("[0-9]+");
  Matcher numberMatcher = pattern2.matcher(str);
  // 匹配 10. 或 10.10.
  Pattern pattern3 = Pattern.compile(str3);
  Matcher matcher3 = pattern3.matcher(str);
  // 匹配 xx[xx]年x[x]月
  Pattern pattern4 = Pattern.compile(str4);
  Matcher matcher4 = pattern4.matcher(str);*/
  
  String specialStr = "\\.|\\,|\\/|\\-|\\\\";
  
  Calendar calendar = Calendar.getInstance();
  
  int year = 2008;
  int month = 0;
  int day = 1;
  // 汉字模式
  if (matcher.find()) {
   int monthIndex = str.indexOf("月");
   String strMonth = str.substring(0, monthIndex);
   if ("一".equals(strMonth) || "1".equals(strMonth)) {
    month = 1;
   } else if ("二".equals(strMonth) || "2".equals(strMonth)) {
    month = 2;
   } else if ("三".equals(strMonth) || "3".equals(strMonth)) {
    month = 3;
   } else if ("四".equals(strMonth) || "4".equals(strMonth)) {
    month = 4;
   } else if ("五".equals(strMonth) || "5".equals(strMonth)) {
    month = 5;
   } else if ("六".equals(strMonth) || "6".equals(strMonth)) {
    month = 6;
   } else if ("七".equals(strMonth) || "7".equals(strMonth)) {
    month = 7;
   } else if ("八".equals(strMonth) || "8".equals(strMonth)) {
    month = 8;
   } else if ("九".equals(strMonth) || "9".equals(strMonth)) {
    month = 9;
   } else if ("十".equals(strMonth) || "10".equals(strMonth)) {
    month = 10;
   } else if ("十一".equals(strMonth) || "11".equals(strMonth)) {
    month = 11;
   } else if ("十二".equals(strMonth) || "12".equals(strMonth)) {
    month = 12;
   }
   calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
   calendar.set(Calendar.MONTH, month - 1);
   calendar.set(Calendar.DAY_OF_MONTH, day);
   date = calendar.getTime();
   System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
   return date;
  }
  // str8
  pattern = Pattern.compile(str8);
  matcher = pattern.matcher(str);
  if (matcher.find()) {
   date = calendar.getTime();
   return date;
  }
  // str11
  pattern = Pattern.compile(str11);
  matcher = pattern.matcher(str);
  if (matcher.find()) {
   str = "无";
  }
  
  // str12
  pattern = Pattern.compile(str12);
  matcher = pattern.matcher(str);
  if (matcher.matches()) {
   str = "无";
  }
  
  // str9
  pattern = Pattern.compile(str9);
  matcher = pattern.matcher(str);
  if (matcher.find()) {
   return date;
  }
  // str10
  pattern = Pattern.compile(str10);
  matcher = pattern.matcher(str);
  if (matcher.matches()) {
   str = str.replaceAll("年", ".");
  }
  
  //str7
  pattern = Pattern.compile(str7);
  matcher = pattern.matcher(str);
  if (matcher.matches()) {
   String[] array = str.split("/");
   String tempMonth = array[0].trim();
   String tempDay = array[1].trim();
   String tempYear = array[2].trim();
   
   if (type == 0) { // 月/日/年
    calendar.set(calendar.YEAR, Integer.parseInt(tempYear));
    calendar.set(calendar.MONTH, Integer.parseInt(tempMonth)-1);
    calendar.set(calendar.DAY_OF_MONTH, Integer.parseInt(tempDay));
   } else {   // 日/月/年
    calendar.set(calendar.YEAR, Integer.parseInt(tempYear));
    calendar.set(calendar.MONTH, Integer.parseInt(tempDay)-1);
    calendar.set(calendar.DAY_OF_MONTH, Integer.parseInt(tempMonth));
   }
   
   date = calendar.getTime();
   System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
   return date;
  }
  // str5
  pattern = Pattern.compile(str5);
  matcher = pattern.matcher(str);
  if (matcher.matches()) {
   str = str.replaceAll("\\s+", "-");
   str = str.substring(str.indexOf("-") + 1);
   date = getFormatDateByMark(str,specialStr);
   System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
   return date;
  }
  // str6
  pattern = Pattern.compile(str6);
  matcher = pattern.matcher(str);
  if (matcher.matches()) {
   str = str.replaceAll(specialStr, ".");
  }
  // str3
  pattern = Pattern.compile(str3);
  matcher = pattern.matcher(str);
  if (matcher.matches()) {
   str = str.replaceAll("月", ".");
   str = str.substring(0, str.lastIndexOf("."));
  }
  if (str.indexOf(".") > -1 || str.indexOf(",") > -1 || str.indexOf("/") > -1 || str.indexOf("\\") > -1 || str.indexOf("-") > -1) {
   date = getFormatDateByMark(str,specialStr);
   System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
   return date;
  }
  
  
  //str4
  pattern = Pattern.compile(str4);
  matcher = pattern.matcher(str);
  if (matcher.find()) {
   int beginIndex = 0;
   int endIndex = 0;
   matcher.reset();
   while(matcher.find()) {
    beginIndex = matcher.start();
    endIndex = matcher.end();
   }
   str = str.substring(beginIndex, endIndex);
   
   int indexYear = str.indexOf("年");
   int indexMonth = str.indexOf("月");
   year = Integer.parseInt(str.substring(0, indexYear));
   month = Integer.parseInt(str.substring(indexYear + 1, indexMonth));
   /*if (indexMonth != str.length() - 1) {
    day = Integer.parseInt(str.substring(indexMonth + 1, str.length()));
    calendar.set(Calendar.DATE, day);
   }*/
   calendar.set(Calendar.YEAR, year);
   calendar.set(Calendar.MONTH, month - 1);
   date = calendar.getTime();
   System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
   return date;
  }
  
  // str2
  pattern = Pattern.compile(str2);
  matcher = pattern.matcher(str);
  if (matcher.matches()) {
   str = str.trim();
   date = getFormatDateByNumeric(str);
   System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
  }
  return date;
 }
 
 private static java.util.Date getFormatDateByMark(String str,String specialStr) {
  Calendar calendar = Calendar.getInstance();
  int year = 2008;
  int month = 0;
  int day = 1;
  java.util.Date date = null;
  String [] strArray = str.split(specialStr);
  String strYear = strArray[0].trim();
  if (strArray[0].length() < 4) {
   int currYear = calendar.get(Calendar.YEAR);
   String tempYear = String.valueOf(currYear);
   String tempStr = tempYear.substring(0,4 - strArray[0].length());
   strYear = tempStr + strYear;
   
   year = Integer.parseInt(strYear);
   if (year > currYear) {
    int offset = (int)Math.pow(10, strArray[0].length());
    year = year - offset;
    strYear = String.valueOf(year);
   }
  }
  year = Integer.parseInt(strYear);
  month = Integer.parseInt(strArray[1].trim());
  if (strArray.length > 2) {
   day = Integer.parseInt(strArray[2].trim());
   calendar.set(Calendar.DATE, day);
  }
  calendar.set(Calendar.YEAR, year);
  calendar.set(Calendar.MONTH, month - 1);
  calendar.set(Calendar.DAY_OF_MONTH, 1);
  date = calendar.getTime();
  return date;
 }

 private static java.util.Date getFormatDateByNumeric(String str) {
  String tempYear = null;
  String tempMonth = null;
  String tempDay = null;
  java.util.Date date = null;
  Calendar calendar = Calendar.getInstance();
  if (str.length() <= 4) {
   int currYear = calendar.get(Calendar.YEAR);
   String tempStr = String.valueOf(currYear);
   tempYear = tempStr.substring(0,4 - str.length());
   tempYear = tempYear + str;
   
   if (str.length() == 4) {
    String tempYear1 = tempYear.substring(0, 2);
    String tempMonth1 = tempYear.substring(2,4);
    int iTempYear1 = Integer.parseInt(tempYear1);
    int tempCurrYear = currYear - 2000;
    if (!"19".equals(tempYear1) && !"20".equals(tempYear1)) {
     if (tempCurrYear >= iTempYear1) {
      tempYear = "20" + tempYear1;
     } else {
      tempYear = "19" + tempYear1;
     }
     tempMonth = tempMonth1;
    }
   }
   
   int year = Integer.parseInt(tempYear);
   if (year > currYear) {
    int offset = (int)Math.pow(10, str.length());
    year = year - offset;
    tempYear = String.valueOf(year);
   }
  } else if(str.length() > 4 && str.length() <= 6) {
   tempYear = str.substring(0,4);
   tempMonth = str.substring(4, str.length());
  } else {
   tempYear = str.substring(0,4);
   tempMonth = str.substring(4, 6);
   tempDay = str.substring(6, str.length());
   if ("0".equals(tempDay)) tempDay = "1";
  }
  if (tempYear != null) calendar.set(Calendar.YEAR, Integer.parseInt(tempYear));
  if (tempMonth != null) calendar.set(Calendar.MONTH, Integer.parseInt(tempMonth) - 1);
  else calendar.set(Calendar.MONTH, 0);
  if (tempDay != null) calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(tempDay));
  else calendar.set(Calendar.DAY_OF_MONTH, 1);
  date = calendar.getTime();
  return date;
 }
}

分享到:
评论

相关推荐

    java中的日期处理类总结

    Java中的日期处理涉及到多个类,包括Date、Calendar、GregorianCalendar以及日期格式化类如DateFormat和SimpleDateFormat。这些类主要用于管理、操作和格式化日期和时间。以下是对这些类的详细说明: 1. **Date类**...

    日期处理工具类

    在Java编程语言中,日期处理是一项常见的任务,用于管理和操作日期和时间。为了方便开发者,Java提供了多种工具类来处理日期。"日期处理工具类"通常是指一个自定义的类,它封装了一些常用的方法,例如日期格式化、...

    c语言日期处理程序

    在C语言中,日期处理是一项基础但重要的任务,它涉及到时间戳、日期格式化、日期比较和日期计算等。C语言本身并没有内置的日期库,但通过标准库中的`&lt;time.h&gt;`头文件,我们可以利用系统时间来实现日期的相关操作。...

    C++的日期处理类,功能强大

    在C++编程中,日期处理是一项常见的任务,尤其是在开发涉及日历、时间追踪或数据分析的应用程序时。C++标准库并没有内置一个强大的日期处理类,但可以通过自定义类或者使用第三方库来实现这一功能。本篇文章将深入...

    c#中的日期处理函数

    本文将深入探讨C#中的日期处理函数,特别是`DateTime`类的使用方法。 1. `DateTime` 类型是C#中用于表示日期和时间的内置类型。通过以下方式可以创建一个表示当前时间的`DateTime`对象: ```csharp System....

    Date4j,一个简约的日期处理类库

    Date4j是一个轻量级的日期处理类库,它的出现为Java开发者提供了一种更为简单易用的方式来处理日期和时间。这个库的目标是简化日期计算,避免使用Java标准库中的`java.util.Date`和`java.util.Calendar`这些复杂的...

    oracle日期处理函数大全

    以下是一些关键的Oracle日期处理函数和SQL语句的详细说明: 1. **TO_DATE函数**:用于将字符串转换为日期。例如,`TO_DATE('2022-04-05', 'YYYY-MM-DD')`将字符串'2022-04-05'转换为日期。日期格式必须与提供的模式...

    日期处理类

    在C++编程中,日期处理是一项常见的任务,特别是在开发涉及时间序列分析、日志记录或者时间敏感的应用程序时。为了方便地操作日期,我们可以自定义一个日期处理类,如标题所示的"日期处理类"。这个类通常会包含一...

    java日期处理总结

    java中关于日期处理的总结,包含各种日期格式之间的转java.util.Date(已经不提倡使用,该类的方法比较少) java.util.Calendar(抽象类) java.util.GregorianCalendar(是Calendar的子类,日期处理时候经常使用该类)****...

    oracle日期处理完全版

    Oracle数据库在日期处理方面提供了丰富的函数和操作方式,使得对日期和时间的管理变得非常灵活。以下是对标题和描述中提到的知识点的详细说明: 1. **日期和字符转换**: - `to_date` 函数用于将字符型数据转换为...

    oracle日期处理全集

    Oracle数据库在日期处理方面提供了丰富的函数,使得对日期和时间的操作变得非常灵活。以下是对给定文件中提及的Oracle日期处理函数的详细说明: 1. **add_months(d, n)**: 此函数将日期d加上n个月,返回新的日期。...

    java语言日期处理大全

    在Java编程中,日期处理是一项常见的任务,涉及到各种日期和时间的操作。以下是一些关于Java日期处理的关键知识点,这些知识点在给定的文件中有所提及: 1. **获取当前日期**: Java通过`java.util.Date`类可以...

    sql 日期处理常用方法

    本文将详细介绍SQL中日期处理的常用方法,包括获取当前系统时间、日期加减运算、计算日期差、提取日期部分、转换日期格式等功能。 ### 一、获取当前系统时间 在SQL Server中,`GETDATE()`函数用于返回当前的系统...

    MSSQL中日期处理

    在SQL Server中,日期处理是数据管理的核心部分,涉及到各种日期和时间的计算、比较以及格式化。本章主要探讨SQL Server中两种主要的日期类型:datetime和smalldatetime。 1. **日期类型概述** - **datetime**: ...

    Java日期处理工具类

    基本涵盖了各种场景的日期处理需要,包括时间类型转换,获取N天前后,月初月末,某段时间按天拆分等功能,欢迎使用。

    Java中日期处理的代码

    根据给定的文件标题、描述、标签以及部分内容,我们可以总结出以下有关 Java 日期处理的知识点: ### 1. 导入必要的包 在 Java 中处理日期时,我们需要导入一些必要的包来支持日期时间的格式化、解析等功能。示例...

    数据库oracle中日期处理

    在Oracle数据库中,日期处理是一项基础且重要的任务,它涉及到数据的存储、查询以及分析。Oracle提供了丰富的函数和操作符来处理日期,使得我们可以轻松地完成诸如计算星期几、两个日期之间的天数等常见需求。以下是...

Global site tag (gtag.js) - Google Analytics