반응형

Date Class getTime() 와 SimpleDateFormat을 통한 String 날짜 시간 비교 방법

감사합니다 고맙습니다 운이 좋습니다.


개발을 하다보면 시간을 비교 해야 하는 경우가 많이 있습니다. 

String 형태의 지정된 날짜와 현재 또는 특정일과 비교를 해야 하는 경우에 getTime() 을 사용하게 됩니다. 

getTime()은 import java.util.Date 를 선언하고 사용하면 됩니다. 

String 일시(날짜+시간)를 서로 비교할때 SimpleDateFormat을 사용해서 동일한 형식으로 변경하여 쉽게 비교 할수 있습니다. 

예를 들어 현재일시가 세일기간 사이에 있는지 확인을 방법은 다음과 같습니다. 


String saleStartStr = "2018.09.28 00:30"; //세일 시작 일시

String saleEndStr = "2018.09.30 23:30"; //세일 종료 일시

Date nowDayTime = new Date();


SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm"); // String 날짜 형식을 정의 합니다. 

String nowDayTimeStr = sdf.format(nowDayTime);  // 현재일시를 같은 형식으로 파싱합니다.

Date saleStart = sdf.parse(saleStartStr); // 시간으로 변경을 합니다. 

Date saleEnd = sdf.parse(saleEndStr); // 시간으로 변경을 합니다.

Date nowDayTimeFormat = sdf.parse(nowDayTimeStr); // 시간으로 변경을 합니다.


// 이제 비교를 진행 합니니다. 

// Date 형식으로 값을 변경한 것은 getTime() 메소드를 사용하기 위해서 입니다. 


if(saleStart.getTime() > nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 시작 전 입니다.");

}

// nowDayTimeFormat.getTime() 값이 작으면 시작일보다 앞에 있다는 이야기 입니다. 

// 날짜를 비교할때 실수를 많이 하는 부분이기 때문에 주의가 필요합니다. 


if(saleStart.getTime() < nowDayTimeFormat.getTime(){

System.out.println("현재는 세일 시작 후 입니다.");

}

// 현재 시간을 분단위 까지 정의 하였기 때문에 두 값이 같은 경우는 제외 하겠습니다. 

// 동일하게 종료 시간도 다음과 같이 확인을 할 수 있습니다. 


if(saleEnd.getTime() > nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 종료 전 입니다.");

}

if(saleEnd.getTime() < nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 종료 후 입니다.");

}

// 다음은 세일 기간 중인지 아닌지를 알아보겠습니다. 


if(saleStart.getTime() <= nowDayTimeFormat.getTime() && saleEnd.getTime() >= nowDayTimeFormat.getTime()){

System.out.println("현재는 세일기간 중 입니다.");

}else{

System.out.println("현재는 세일기간이 아닙니다.");

}


// 조건을 변경하여 다음과 같이 조건문을 사용 할 수도 있습니다. 


if(saleStart.getTime() > nowDayTimeFormat.getTime() && saleEnd.getTime() < nowDayTimeFormat.getTime()){

System.out.println("현재는 세일기간이 아닙니다.");

}else{

System.out.println("현재는 세일기간중 입니다.");

}


// 그럼 getTime() 으로 비교가 가능한 이유는 날짜date를 long형 숫자 값으로 변경하기 때문입니다. 

// 여기서는 현재 날짜를 new Date()를 사용해서 구했지만 

// 요즘은 Calendar 를 사용해서 많이 구합니다. 

// Calendar 를 사용하면 다음과 같습니다. 

// 선언된 nowDayTime.getTime() 을 바로 사용해도 되지만 같은 형식으로 변경한 후에 사용한것으로 구성했습니다. 

String saleStartStr = "2018.09.28 00:30";

String saleEndStr = "2018.09.30 23:30";

Calendar nowDayTime = Calendar.getInstance(); // Calendar 를 이용해서 현재일시를 구합니다. 


SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm");  

String nowDayTimeStr = sdf.format(nowDayTime);

Date saleStart = sdf.parse(saleStartStr);

Date saleEnd = sdf.parse(saleEndStr);

Date nowDayTimeFormat = sdf.parse(nowDayTimeStr);


if(saleStart.getTime() > nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 시작 전 입니다.");

}


if(saleStart.getTime() < nowDayTimeFormat.getTime(){

System.out.println("현재는 세일 시작 후 입니다.");

}


if(saleEnd.getTime() > nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 종료 전 입니다.");

}

if(saleEnd.getTime() < nowDayTimeFormat.getTime()){

System.out.println("현재는 세일 종료 후 입니다.");

}


if(saleStart.getTime() <= nowDayTimeFormat.getTime() && saleEnd.getTime() >= nowDayTimeFormat.getTime()){

System.out.println("현재는 세일기간 중 입니다.");

}else{

System.out.println("현재는 세일기간이 아닙니다.");

}


if(saleStart.getTime() > nowDayTimeFormat.getTime() && saleEnd.getTime() < nowDayTimeFormat.getTime()){

System.out.println("현재는 세일기간이 아닙니다.");

}else{

System.out.println("현재는 세일기간중 입니다.");

}


 

반응형
반응형

XSLT 사용법 xml


XSLT(Extensible Stylesheet Language Transformations)는

W3C에서 제정한 표준으로 XML 변환 언어를 사용하여 XML 문서로 바꿔주며, 탐색하기 위해 XPath를 사용합니다.

원본 문서는 변경되지 않으며, 원본 문서를 기반으로 새로운 문서가 생성됩니다.

새 문서는 표준 XML 문법 또는 HTML, 일반 텍스트 형식으로 출력합니다.

XSLT는 XML 데이터를 웹 페이지로 표시하기 위해 HTML 또는 XHTML 문서로 변환할 때 자주 사용합니다.

변환은 클라이언트나 서버에서 동적으로 수행되거나, 퍼블리싱 단계에서 수행되기도 합니다

XML을 PDF, PostScript, AWT, PNG와 같은 다양한 형태로 바꿀 수 있는 XML-FO로 변환할 때도 사용합니다.

XSLT는 일반적으로 서로 다른 XML 스키마를 사용하는 XML 메시지를 변환하거나, 

하나의 스키마 안에서 문서를 변경하기 위해 사용합니다.


즉 XSLT 란 XML 을 다른 형식의 출력 format 으로 바꾸어주는 표준 문법입니다.

xml 로 key, value 관계를 지정 하고 xsl 문서로 출력 형태를 지정 하면 됩니다.


아래 예제는 xsl 을


<template1> 을 정의 하고 그 다음에 <template1> 안의 내용인 <template1-1>,<template1-2> 를 정의 하는 방식입니다.

<xsl:apply-templates/> 는 자식 노드 값을 모두 나열하는데 하단에서 자식 노드출력을  template 로 지정해 주면 아래서 지정해 준 방식 대로 출력 된다.

 =================================

example.xml 내용


<?xml version="1.0" encoding="UTF-8"?>

<?xml:stylesheet type="text/xsl" href="example.xsl"?>

<MEMBERS>


<MEMBER>

 <name>스타</name>

 <email>start@gmail.com</email>

 <homepage>http://start.***.net</homepage>

</MEMBER>

<MEMBER>

 <name>달림</name>

 <email>mooni@hanmail.net</email>

 <homepage>no1</homepage>

</MEMBER>


</MEMBERS>



==============================================

example.xsl 내용


<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" indent="no" encoding="UTF-8"/>

<xsl:template match="MEMBERS">

<table border="1">

 

 <tr>

  <td>

   NAME

  </td>

  <td>

   Email

  </td>

  <td>

   Homepage

  </td>

 </tr>

 

 <xsl:apply-templates/>


</table>

</xsl:template>


<xsl:template match="MEMBER">

 <tr>

 <xsl:apply-templates/>

 </tr>

</xsl:template>


<xsl:template match="name">

 <td>

  <xsl:apply-templates/>

 </td>

</xsl:template>


<xsl:template match="email">

 <td>

  <xsl:apply-templates/>

 </td>

</xsl:template>


<xsl:template match="homepage">

 <td>

  <xsl:apply-templates/>

 </td>

</xsl:template>


</xsl:stylesheet>


==============================================

example.xml 을 웹브라우저에서 실행 시킨 결과는 다음과 같이 표시 할수 있습니다. 


 NAME

Email 

Homepage 

 스타

 start@gmail.com

 http://start.***.net

 달림

 mooni@hanmail.net

 no1


반응형

+ Recent posts