날짜 시간 포맷 제어 자바 클래스 : JAVA DateUtils Date time
반응형
날짜와 시간을 원하는 포맷으로 제어하거나 연산하여 결과값을 얻는 클래스
※ 필요 라이브러리 : 아파치그룹 commons 프로젝트에서 commons-lang 을 사용한다. 아래 첨부물을 받거나 해당 프로젝트 사이트에서 받으면 됩니다.
※ 필요 라이브러리 : 아파치그룹 commons 프로젝트에서 commons-lang 을 사용한다. 아래 첨부물을 받거나 해당 프로젝트 사이트에서 받으면 됩니다.
commons-lang-2.5.jar
날짜와 시간을 원하는 포맷의 결과를 문자열 형태로 반환받으며, 정규화식과 SimpleDateFormat 를 이용한다.
시작시간과 종료시간을 이용하여 간격을 구하거나, 두 시간의 합을 구할 수 있다.
날짜 시간 클래스 : DateUtils.java
/** * @class DateUtils ver 1.0.0 * @brief 날짜와 시간을 제어함 * * registered date 20081217 * programmed by Seok Kyun. Choi. (최석균) * http://syaku.tistory.com */ package com.syaku.core.util; import java.util.*; import java.util.regex.*; import java.text.*; import org.apache.commons.lang.StringUtils; public class DateUtils extends StringUtils { private static SimpleDateFormat formatter; private static DecimalFormat df; /** * @method : getDate(parameter,parameter2) * @brief : 정규표현식을 이용하여, 날짜를 제어한다. 각 시분초는 구분자가 있어야 한다. * @parameters { parameter : (String) $1 = 년 , $2 = 월 , $3 = 일 , $4 = 시 , $5 = 분 , $6 = 초 parameter2 : (String) 구분자(-_:./\s) 를 가진 날짜 } * @return : (String) 정규표현식 시간 || 00:00:00 */ public static String getDate(String patten,String date) { if (isEmpty(date)) return date; String sysdate_patten = "(^[0-9]*)[-_:.\\/\\s]?([0-9]*)[-_:.\\/\\s]?([0-9]*)[-_:.\\/\\s]?([0-9]*)[-_:.\\/\\s]?([0-9]*)[-_:.\\/\\s]?([0-9]*)(.*)$"; Pattern date_comp = Pattern.compile(sysdate_patten); if (date_comp.matcher(date).find()) return date.replaceAll(sysdate_patten,patten); else return getDate(patten,"00:00:00"); } /** * @method : setDate(parameter) * @brief : 날짜를 설정하고 Date 객체로 반환한다. * @parameters { parameter : (String) 날짜 } * @return : (Date) */ public static Date setDate(String date) throws Exception { date = date("yyyy-MM-dd HH:mm:ss",date); formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return (Date) formatter.parse(date); } /** * @method : getTime(parameter,parameter2) * @brief : 정규표현식을 이용하여, 시간을 제어한다. 각 시분초는 구분자가 있어야 한다. * @parameters { parameter : (String) $1 = 시 , $2 = 분 , $3 = 초 parameter2 : (String) 구분자(-_:./\s) 를 가진 시간 } * @return : (String) 정규표현식 시간 || 00:00:00 */ public static String getTime(String patten,String time) { if (isEmpty(time)) return time; String time_patten = "(^[0-9]*)[-_:.\\/\\s]?([0-9]*)[-_:.\\/\\s]?([0-9]*)(.*)$"; Pattern time_comp = Pattern.compile(time_patten); if (time_comp.matcher(time).find()) return time.replaceAll(time_patten,patten); else return getTime(patten,"00:00:00"); } /** * @method : setTime(parameter) * @brief : 시간을 설정하고 Date 객체로 반환한다. * @parameters { parameter : (String) 시간 } * @return : (Date) */ public static Date setTime(String time) throws Exception { time = time("HH:mm:ss",time); formatter = new SimpleDateFormat("HH:mm:ss"); return (Date) formatter.parse(time); } /** * @method : date(parameter, parameter2) * @brief : SimpleDateFormat 이용하여 날짜를 반환한다. * @parameters { parameter : (String) SimpleDateFormat 클래스의 포맷 parameter2 : (String || Date) SimpleDateFormat 포맷 시간 } * @return : (String) 날짜 */ public static String date() throws Exception { return date("yyyy-MM-dd HH:mm:ss"); } public static String date(String format) throws Exception { formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = formatter.format(new Date()); return date(format,date); } public static String date(String format, Date date) throws Exception { formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return date(format,formatter.format(date)); } public static String date(String format, String date) throws Exception { if (isEmpty(format)) format = "yyyy-MM-dd HH:mm:ss"; if (isEmpty(date)) return null; date = date.replaceAll("[^0-9]+",""); date = rightPad(date,14,'0'); date = date.replaceAll("(^[0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})","$1-$2-$3 $4:$5:$6"); formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date redate = formatter.parse(date); formatter = new SimpleDateFormat(format); return formatter.format(redate); } /** * @method : time(parameter, parameter2) * @brief SimpleDateFormat 이용하여 날짜를 반환한다. * @parameters { parameter : (String) SimpleDateFormat 클래스의 포맷 parameter2 : (String || Date) SimpleDateFormat 포맷 시간 } * @return : (String) 시간 */ public static String time() throws Exception { return time("HH:mm:ss"); } public static String time(String format) throws Exception { formatter = new SimpleDateFormat("HH:mm:ss"); String time = formatter.format(new Date()); return time(format,time); } public static String time(String format, String time) throws Exception { time = time.replaceAll("[^0-9]+",""); time = rightPad(time,6,'0'); time = leftPad(time,14,'0'); return date(format,time); } /** * @method : timespace(parameter, parameter2,parameter3) * @brief 시작시간과 종료시간의 간격을 구합니다. * @parameters { parameter : (String) 시작시간 parameter2 : (String) 종료시간 parameter3 : (String) SimpleDateFormat 클래스의 포맷 } * @return : (String) SimpleDateFormat 포맷 시간 */ public static String timespace(String stime, String etime) throws Exception { return timespace(stime,etime,"HH:mm:ss"); } public static String timespace(String stime, String etime, String format) throws Exception { try { if (isEmpty(stime) || isEmpty(etime)) throw new Exception("parameter null"); stime = stime.replaceAll("[^0-9]+",""); etime = etime.replaceAll("[^0-9]+",""); int s = Integer.parseInt(stime); int e = Integer.parseInt(etime); stime = rightPad(stime,6,'0'); etime = rightPad(etime,6,'0'); stime = date("yyyy-MM-dd HH:mm:ss","19700101" + stime); etime = date("yyyy-MM-dd HH:mm:ss","19700101" + etime); formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date sdate = formatter.parse(stime); Date edate = formatter.parse(etime); // 9시간 (540*60*1000 = 32400000) 오차 제거하기 Long ret = (edate.getTime() - sdate.getTime()) - 32400000; String ext = formatter.format(ret); return date(format,ext); } catch (Exception e) { return time(format,"000000"); } } /** * @method : timeAdd(parameter, parameter2,parameter3) * @brief 구분자를 포함한 두 시간을 합산합니다. 분 초 중에 60 이상인 경우 시간 혹은 분을 반올림합니다. * @parameters { parameter : (String) 구분자(-_:./\s)를 가진 사간 parameter2 : (String) 구분자(-_:./\s)를 가진 시간 parameter3 : (String) $1 = 시 , $2 = 분 , $3 = 초 } * @return : (String) 정규표현식 시간 : 00:00:00 */ public static String timeAdd(String time,String time2,String patten) throws Exception { String ret = "00:00:00"; if (isEmpty(patten)) patten = "$1:$2:$3"; int sh = Integer.parseInt(getTime("$1",time)); int sm = Integer.parseInt(getTime("$2",time)); int ss = Integer.parseInt(getTime("$3",time)); int eh = Integer.parseInt(getTime("$1",time2)); int em = Integer.parseInt(getTime("$2",time2)); int es = Integer.parseInt(getTime("$3",time2)); try { int h = sh + eh; int s = ss + es; int m = 0; if (s > 60) { Double mm = Math.floor(s/60); df = new DecimalFormat("0"); int mmm = Integer.parseInt(df.format(mm)); s = s - (mmm * 60); m = m + mmm; } m = m + sm + em; if (m > 60) { Double hh = Math.floor(m/60); df = new DecimalFormat("0"); int hhh = Integer.parseInt(df.format(hh)); m = m - (hhh * 60); h = h + hhh; } ret = leftPad(Integer.toString(h),2,'0') + ":" + leftPad(Integer.toString(m),2,'0') + ":" + leftPad(Integer.toString(s),2,'0'); } catch (Exception e) { ret = "00:00:00"; } return getTime(patten,ret); } }
샘플소스
<%@ page contentType="text/html; charset=utf-8" %> <%@ page import="java.util.*" %> <%@ page import="com.syaku.core.util.DateUtils" %> <h2> DateUtils.date()</h2> <% String today = DateUtils.date(); out.println("오늘날짜 : " + today); // 오늘날짜 : 2010-04-27 10:56:32 %> <br /> <% out.println("new Date() => yyyy/MM/dd : " + DateUtils.date("yyyy/MM/dd")); // new Date() => yyyy/MM/dd : 2010/04/27 %> <br /> <% out.println("2010103004 => yyyy년도 MM월 HH시간입니다 : " + DateUtils.date("yyyy년도 MM월 HH시간입니다","2010103004")); // 2010103004 => yyyy년도 MM월 HH시간입니다 : 2010년도 10월 04시간입니다 %> <h2> DateUtils.setDate()</h2> <% Date date = DateUtils.setDate(today); out.println("getTime : " + date.getTime()); // getTime : 1272333392000 %> <br /> <% out.println("yyyy 년도 : " + DateUtils.date("yyyy 년도",date)); // yyyy 년도 : 2010 년도 %> <h2> DateUtils.time()</h2> <% String nowtime = DateUtils.time(); out.println("현재시간 : " + nowtime); // 현재시간 : 10:56:32 %> <br /> <% out.println("new Date() => KK:mm:ss : " + DateUtils.time("KK:mm:ss")); // new Date() => KK:mm:ss : 10:56:32 %> <br /> <% out.println("14:20:10 => hh시간입니다 : " + DateUtils.time("hh시간입니다","14:20:10")); // 14:20:10 => hh시간입니다 : 02시간입니다 %> <h2> DateUtils.setTime()</h2> <% Date time = DateUtils.setTime(nowtime); out.println("getHours : " + time.getHours()); // getHours : 10 %> <h2> DateUtils.timeAdd()</h2> <% String addtime = DateUtils.timeAdd("100:20:10","150:50:30","$1시간이며, $2분입니다."); out.println("100:20:10 + 150:50:30 더한 시간은 " + addtime); // 100:20:10 + 150:50:30 더한 시간은 251시간이며, 10분입니다. %> <h2> DateUtils.timespace()</h2> <% String timespace = DateUtils.timespace("22:20:10","07:50:30","HH:mm:ss"); out.println("22:20:10 ~ 07:50:30 간격은 " + timespace); // 22:20:10 ~ 07:50:30 간격은 09:30:20 %>
반응형
'개발노트 > JAVA' 카테고리의 다른 글
다양한 문자 조합을 이용한 카운팅 구하기 (0) | 2010.10.20 |
---|---|
자바 JXL 엑셀파일을 읽어 배열리턴 : JAVA EXCEL ArrayList (0) | 2010.09.08 |
자바 XML 제어 라이브러리 JDOM : JAVA (0) | 2010.01.05 |
자바 다양한 형변환. 그리고 아스키 코드 String char int : JAVA (2) | 2009.12.01 |