java对日期时间的相关操作方法
程序员文章站
2022-07-13 11:34:59
...
/** * */ package com.keda.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author LeeYau * */ public class FDateFormat { public static final SimpleDateFormat NORMAL_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static final SimpleDateFormat NORMAL_FORMATA = new SimpleDateFormat("yyyy-MM-dd"); public static final SimpleDateFormat YEAR_FORMAT = new SimpleDateFormat("yyyy"); public static final SimpleDateFormat MONTH_FORMAT = new SimpleDateFormat("MM"); public static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm:ss"); public static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("dd"); public static final SimpleDateFormat HOUR_FORMAT = new SimpleDateFormat("HH"); public static final SimpleDateFormat MINUTE_FORMAT = new SimpleDateFormat("mm"); public static final SimpleDateFormat SECOND_FORMAT = new SimpleDateFormat("ss"); public static final SimpleDateFormat YEAR_MONTH = new SimpleDateFormat("yyMM"); public static final SimpleDateFormat CONNECT_FORMAT = new SimpleDateFormat("yyyyMMdd"); public static final SimpleDateFormat YYMMDD_FORMAT = new SimpleDateFormat("yyyyMMdd"); public static final SimpleDateFormat MMDD_FORMAT = new SimpleDateFormat("MM-dd"); public static final SimpleDateFormat MMD_FORMAT = new SimpleDateFormat("MM-d"); public static final SimpleDateFormat MDD_FORMAT = new SimpleDateFormat("M-dd"); public static final SimpleDateFormat MD_FORMAT = new SimpleDateFormat("M-d"); /** * 返回 yyyyMMdd 格式的日期 * @return * @author liguosheng 2011-11-23 上午09:54:26 */ public static String GetConnectDate(){ String strRet = ""; try{ SimpleDateFormat sf = CONNECT_FORMAT; strRet = sf.format(new java.util.Date(System.currentTimeMillis())); }catch(Exception e){ e.printStackTrace(); } return strRet; } /** * 返回 系统的 yyyyMMdd 格式的日期 * add by lee on 2011-12-07 * @return */ public static String GetSysyyMMddFormatDate(){ String strRet = ""; try{ SimpleDateFormat sf = YYMMDD_FORMAT; strRet = sf.format(new java.util.Date(System.currentTimeMillis())); }catch(Exception e){ e.printStackTrace(); } return strRet; } /*** * 功能:返回 yyyy-MM-dd HH:mm:ss 格式的日期 * @return */ public static String GetLongDate(){ String strRet=""; try{ SimpleDateFormat sf=NORMAL_FORMAT; strRet=sf.format(new java.util.Date(System.currentTimeMillis())); }catch(Exception e){ e.printStackTrace(); } return strRet; } /*** * 功能:返回 yyyy-MM-dd 格式的日期 * @return */ public static String GetShortDate(){ String strRet=""; try{ SimpleDateFormat sf=NORMAL_FORMATA; strRet=sf.format(new java.util.Date(System.currentTimeMillis())); }catch(Exception e){ e.printStackTrace(); } return strRet; } /** * 返回当前时间 * @return */ public static String getCurTime(){ String strRet=""; try{ SimpleDateFormat sf=TIME_FORMAT; strRet=sf.format(new java.util.Date(System.currentTimeMillis())); }catch(Exception e){ e.printStackTrace(); } return strRet; } /** * 返回指定日期时间 * @return */ public static String getPointToDateTime(String dateTime){ String strRet=""; try{ Date date = NORMAL_FORMAT.parse(dateTime); Calendar cal = Calendar.getInstance(); cal.setTime(date); SimpleDateFormat sf=TIME_FORMAT; strRet=sf.format(new java.util.Date(cal.getTimeInMillis())); }catch(Exception e){ e.printStackTrace(); } return strRet; } //返回当前日期的格式 public static String GetDateTime(SimpleDateFormat sformat) { SimpleDateFormat sf=null; String strRet=null; if(sformat==null){ sf=NORMAL_FORMAT; }else{ sf=sformat; } try{ strRet=sf.format(new java.util.Date(System.currentTimeMillis())); }catch(Exception e){ System.out.println("getCurrent time error="+e.getMessage()); } return strRet; } /*** * 将传入的日期型转换成YYY-MM-DD的字符形 * @param date * @return */ public static String getShortDate(Date date){ try{ SimpleDateFormat sf=NORMAL_FORMATA; return sf.format(date); }catch(Exception e){ e.printStackTrace(); } return null; } /**** * 取传入的日期与系统日期相差的天数(传入日期-系统日期) * @param strDate----参数格式:yyyy-MM-dd * @return */ public static Long getDayDifferWithSystemDate(String strDate){ try{ final long DAY = 3600*1000*24; DateFormat f = new SimpleDateFormat("yyyy-MM-dd"); Date sysTemDate = f.parse(f.format(new Date())); Date inputDate = f.parse(strDate); long lngRetDiffer=(inputDate.getTime()-sysTemDate.getTime())/DAY; return lngRetDiffer; }catch(Exception e){ e.printStackTrace(); } return null; } /**** * add by lee on 2011-07-31 * 计算传入的日期相差的天数(endDay-beginDate) * @param beginDate----参数格式:yyyy-MM-dd * @param endDay----参数格式:yyyy-MM-dd * @return */ public static Long getDayDiffer(String beginDate,String endDay){ try{ final long DAY = 3600*1000*24; DateFormat f = new SimpleDateFormat("yyyy-MM-dd"); Date startDate = f.parse(beginDate); Date endDate = f.parse(endDay); long lngRetDiffer=(endDate.getTime()-startDate.getTime())/DAY; return lngRetDiffer; }catch(Exception e){ e.printStackTrace(); } return null; } /**** * 将长整型的日期类型,转换成字符型的日期类型 * @param lngDate * @param DateFormate * @return */ public static String getLongToDateString(long lngDate,String DateFormate){ try{ Date date=new Date(lngDate); DateFormat df=null; if(DateFormate!=null){ df = new SimpleDateFormat(DateFormate); }else{ df=NORMAL_FORMAT; } return df.format(date); }catch(Exception e){ System.out.println("长整型:"+lngDate+"转换成日期类型出错了!"); e.printStackTrace(); } return null; } /**** * 根据输入的日期,及相隔的天数,返回相隔天数的日期 * @param strDate-----输入的日期,格式要求yyyy-mm-dd * @param intDate-----相隔的天数,可为正数或负数,为正数时返回的是当前日期的 后intDate天的日期, * 为负数时返回的是当前日期的前intDate的日期 * @return------返回为yyyy-mm-dd格式的日期字符串 */ public static String DateOperate(String strDate,Integer intDate){ try{ String strYear = strDate.substring(0, 4); String strMoth = strDate.substring(5, 7); String strDay = strDate.substring(8, 10); int year = Integer.parseInt(strYear); int month = Integer.parseInt(strMoth); int date = Integer.parseInt(strDay); Calendar calenDar = new GregorianCalendar(year, month - 1, date); calenDar.add(GregorianCalendar.DATE,intDate); DateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd"); String currentTime=formatDate.format(calenDar.getTime()); return currentTime; }catch(Exception e){ e.printStackTrace(); } return null; } /** * 日期格式转换,将yyyy/MM/dd日期格式转换成yyyy-MM-dd * @param sourceDate 格式为yyyy/MM/dd * @return 返回为yyyy-mm-dd格式的日期字符串 */ public static String dateFormatConversion(String sourceDate) throws Exception{ String targetDate=sourceDate.replace("/", "-"); return targetDate; } /** * 将日期转换成数字类型,用于日期比较 * @param sourceDate 格式为yyyy-MM-dd * @return 返回一个整型 */ public static int numberOfDate(String sourceDate){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 格式化日期 SimpleDateFormat datefd = new SimpleDateFormat("yyyyMMdd"); //日期格式转换---便于日期比较 try { Date d = sdf.parse(sourceDate); int newData = Integer.parseInt(datefd.format(d)); return newData; } catch (ParseException e) { e.printStackTrace(); } return 0; } /***** * 判断YYYY-MM-DD格式的字符是否为合法的日期格式 * @param sDate * @return */ public static boolean isValidDate(String sDate) { String datePattern1 = "\\d{4}-\\d{2}-\\d{2}"; String datePattern2 = "^((\\d{2}(([02468][048])|([13579][26]))" + "[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|" + "(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?" + "((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?(" + "(((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?" + "((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))"; if ((sDate != null)) { Pattern pattern = Pattern.compile(datePattern1); Matcher match = pattern.matcher(sDate); if (match.matches()) { pattern = Pattern.compile(datePattern2); match = pattern.matcher(sDate); return match.matches(); } else { return false; } } return false; } /** * 通过开始日期 和 结束日期 算出他们的时间差 并返回分钟 * @param bDate * @param eDate * @return * @author liguosheng 2012-2-15 下午07:53:31 */ public static double getTimeDifference(String beginDate,String endDate) throws Exception{ SimpleDateFormat sim = NORMAL_FORMAT; Date bDate = sim.parse(beginDate); Date eDate = sim.parse(endDate); return (eDate.getTime() - bDate.getTime())/1000/60 ; } /** * 功能:一个日期时间加上分钟数,得到一个新的日期时间 * @param beginDateTime * @param addMinutes * @return * @throws ParseException * @author liguosheng 2012-2-16 上午09:01:10 */ public static String getNewDate(String beginDateTime, long addMinutes)throws ParseException { SimpleDateFormat sim = NORMAL_FORMAT; Date d1 = sim.parse(beginDateTime); long time = d1.getTime(); addMinutes = addMinutes * 60 * 1000; time += addMinutes; return sim.format(new Date(time)); } /** * 返回 yyyy-MM-dd hh:mm:ss 格式的日期 * @param date * @return * @author liguosheng 2012-2-16 上午10:22:14 */ public static String getFormatLongDate(String date) throws ParseException{ SimpleDateFormat dateFormat = NORMAL_FORMAT; return dateFormat.format(dateFormat.parse(date)); } /** * 返回 yyyy-MM-dd格式的日期 * @param date * @return * @author hsh 2012-7-04 16:17:00 */ public static Date getFormatShortDate(String dateTime) throws ParseException{ return NORMAL_FORMATA.parse(dateTime); } /** * 将日期参数转换成只有月份日期形式 * @param dateTime * @return * @throws ParseException * @author hsh add on 2012-07-09 10:18:00 */ public static String[] getMD_Format(Date dateTime)throws ParseException{ String[] mdArr = new String[4]; try{ mdArr[0] = MMDD_FORMAT.format(dateTime); mdArr[1] = MMD_FORMAT.format(dateTime); mdArr[2] = MDD_FORMAT.format(dateTime); mdArr[3] = MD_FORMAT.format(dateTime); }catch(Exception e){ e.printStackTrace(); } return mdArr; } /** * 获得指定日期的在一个星期中的处于星期几 * @param date 日期时间 * @return */ private String getWeekDayCode(Date date ){ Calendar cal = Calendar.getInstance(); cal.setTime(date); //日历中每个星期是从星期日开始,因此当取到星期日是1,星期一是2,...星期六是7。 String weekDay = String.valueOf(cal.get(Calendar.DAY_OF_WEEK)); return weekDay ; } }
上一篇: 关于用java程序调用本地动态库(*.dll文件)
下一篇: 找出一个字符串中的数字
推荐阅读
-
Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用
-
Java日期时间API系列12-----Jdk8中java.time包中的新的日期时间API类,日期格式化,常用日期格式大全
-
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
-
Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate
-
Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别
-
Java使用DateTimeFormatter格式化输入的日期时间
-
Java开发笔记(四十三)更好用的本地日期时间
-
Java中的日期与时间
-
JAVA时间日期处理类,主要用来遍历两个日期之间的每一天
-
为什么不建议使用Date,而是使用Java8新的时间和日期API?