메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
31 Gmail 메일 서버를 이용해서 메일 보내기 file 2020.06.29 256
30 jstl <c:url value=""> 사용시 ;jsessionid= 붙는 현상 file 2021.03.31 230
29 자바 - 공백 문자 제거하기 (trim, replaceAll) file 2021.03.31 173
28 [객체 지향 언어의 이해] 업캐스팅과 다운캐스팅 file 2021.03.31 157
27 HashMap 사용하기 file 2021.03.31 134
26 자바 대소문자 확인하는 방법 file 2023.02.15 131
25 Reflection을 활용한 메서드, 필드 값 불러오기. 2021.03.31 124
24 국제 시간에 따른 날짜 출력 2020.06.29 121
23 TCP 소켓 프로그래밍 01 - Server/Client 일대일 연결 file 2021.03.31 119
22 자바에서 문자열 비교 시 == 가 아닌 equals를 써야하는 이유 file 2023.02.15 114
21 자바 String Class 문자열 처리 함수에 대한 정리 2021.03.31 106
20 쓰레드 (Thread) 사용하기 file 2021.03.31 104
19 자바 초기화는 무슨 뜻이고 왜 해야할까? file 2023.02.15 84
18 자바 메소드(Method)란 무엇인가? file 2023.02.15 78
17 자바 클래스와 메서드 2023.02.15 77
16 자바 extends Thread, implements Runnable 차이 file 2023.02.15 77
15 request header 로부터 접속 정보 확인 file 2023.02.15 75
14 자바 extends, implements 차이점 알아보기 file 2023.02.15 75
13 Singleton Pattern 과 DeadLock file 2023.02.15 74
12 자바 필드, 멤버 변수, 전역 변수는 같은 말? file 2023.02.15 74
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved