메뉴 건너뛰기

조회 수 5233 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
날짜와 시간을 원하는 포맷으로 제어하거나 연산하여 결과값을 얻는 클래스

※ 필요 라이브러리 : 아파치그룹 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
%>





List of Articles
번호 제목 날짜 조회 수
91 숫자형식 포멧 방법 2018.02.09 2351
90 JAVA 두개의 문서 파일 비교하기 2018.07.09 2388
89 자바 정규식 마스킹처리 file 2018.06.26 2632
88 인터페이스 2016.09.13 3089
87 데몬쓰레드 2016.09.13 3099
86 for-each문 file 2016.09.13 3120
85 public static void main(String [] args) 2016.09.13 3143
84 익명클래스 2016.09.13 3143
83 오토박싱 2016.09.13 3246
82 예외 처리 기본 file 2016.09.13 3249
81 다형성 file 2016.09.13 3260
80 쓰레드의 실행제어 file 2016.09.13 3264
79 쓰레드 기본 2016.09.13 3288
78 제네릭 file 2016.09.13 3297
77 쓰레드의 동기화 2016.09.13 3315
76 쓰레드 그룹 file 2016.09.13 3323
75 클래스멤버와 인스턴스멤버간의 참조와 호출 2016.09.13 3346
74 static 2016.09.13 3354
73 Database Connections 생성하기 (Mysql) file 2016.08.29 3365
72 클래스 객체 생성과 사용 2016.09.19 3377
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved