3ab0be9c0bfa3f90051b551c30e4a5d9da601fa8.svn-base 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package xin.glue.user.common;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. public class DateUtils
  7. {
  8. public static final int MILLIS_PER_SECOND = 1000;
  9. public static final int MILLIS_PER_MINUTE = 1000 * 60;
  10. public static final int MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
  11. public static final String DEFAULT_DATE_FORMAT = "yyyyMMddHHmmss";
  12. private DateUtils()
  13. {
  14. }
  15. /**
  16. * 디폴트 DateFormat(yyyyMMddHHmmss)을 사용하여 입력된 날자를 연산한 후
  17. * Date String을 리턴한다.
  18. *
  19. * 예제> getStringDateAddedTime("20081120132215", 0,0,0,25) -> "20081120132240"
  20. * getStringDateAddedTime("20081120132215", 1,0,0,0) -> "20081121132215"
  21. * getStringDateAddedTime("20081120132215", 0,2,0,0) -> "20081120152215"
  22. * getStringDateAddedTime("20081120132215", 0,0,30,0) -> "20081120135215"
  23. *
  24. * @param date 날자
  25. * @param day 일
  26. * @param hour 시간
  27. * @param min 분
  28. * @param sec 초
  29. * @return 연산된 Date String
  30. * @see java.text.SimpleDateFormat
  31. */
  32. public static String getStringDateAddedTime(String date,
  33. int day,
  34. int hour,
  35. int min,
  36. int sec)
  37. {
  38. return getStringDateAddedTime(date, DEFAULT_DATE_FORMAT, day, hour, min, sec);
  39. }
  40. /**
  41. * 날자를 연산하여 주어진 DateFormat 에 맞도록 String을 리턴함.
  42. *
  43. *
  44. * @param date 날자
  45. * @param format Date Format (예, yyyyMMddHHmmss)
  46. * @param day 일
  47. * @param hour 시간
  48. * @param min 분
  49. * @param sec 초
  50. * @return 연산된 Date String
  51. * @see java.text.SimpleDateFormat
  52. */
  53. public static String getStringDateAddedTime(String date,
  54. String format,
  55. int day,
  56. int hour,
  57. int min,
  58. int sec)
  59. {
  60. SimpleDateFormat sdf = new SimpleDateFormat(format);
  61. Date dateObj = null;
  62. try
  63. {
  64. dateObj = sdf.parse(date);
  65. }
  66. catch (ParseException pe)
  67. {
  68. throw new RuntimeException(
  69. "Cannot convert StringDate - " + pe.getMessage(), pe);
  70. }
  71. Calendar calendar = Calendar.getInstance();
  72. calendar.setTime(dateObj);
  73. calendar.add(Calendar.DATE, day);
  74. calendar.add(Calendar.HOUR, hour);
  75. calendar.add(Calendar.MINUTE, min);
  76. calendar.add(Calendar.SECOND, sec);
  77. return sdf.format(calendar.getTime());
  78. }
  79. /**
  80. * 입력 된 두 시각 차이의 차이를 초(second)로 리턴한다.
  81. * 입력 포맷은 디폴트 포맷이어야 한다.
  82. * (예, yyyyMMddHHmmss)
  83. *
  84. * @param startDay yyyyMMddHHmmss의 날자 String
  85. * @param endDay yyyyMMddHHmmss의 날자 String
  86. * @return 두 시각 차이 (초 단위)
  87. */
  88. public static long getDurationBySeconds(String startDay, String endDay)
  89. {
  90. return getDuration(startDay, endDay) / MILLIS_PER_SECOND;
  91. }
  92. /**
  93. * 입력 된 두 시각 차이의 차이를 분(minute)으로 리턴한다.
  94. * 입력 포맷은 디폴트 포맷이어야 한다.
  95. * (예, yyyyMMddHHmmss)
  96. *
  97. * @param startDay yyyyMMddHHmmss의 날자 String
  98. * @param endDay yyyyMMddHHmmss의 날자 String
  99. * @return 두 시각 차이 (분 단위)
  100. */
  101. public static int getDurationByMinute(String startDay, String endDay)
  102. {
  103. long duration = getDuration(startDay, endDay) / MILLIS_PER_MINUTE;
  104. Long mins = new Long(duration);
  105. return mins.intValue();
  106. }
  107. /**
  108. * 입력 된 두 시각 차이의 차이를 일(day)로 리턴한다.
  109. * 입력 포맷은 디폴트 포맷이어야 한다.
  110. * (예, yyyyMMddHHmmss)
  111. *
  112. * @param startDay yyyyMMddHHmmss의 날자 String
  113. * @param endDay yyyyMMddHHmmss의 날자 String
  114. * @return 두 시각 차이 (일 단위)
  115. */
  116. public static int getDurationByDay(String startDay, String endDay)
  117. {
  118. long duration = getDuration(startDay, endDay) / MILLIS_PER_DAY;
  119. Long days = new Long(duration);
  120. return days.intValue();
  121. }
  122. private static long getDuration(String startDay, String endDay)
  123. {
  124. SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
  125. Date start = null;
  126. Date end = null;
  127. try
  128. {
  129. start = sdf.parse(startDay);
  130. end = sdf.parse(endDay);
  131. }
  132. catch (ParseException pe)
  133. {
  134. throw new RuntimeException(
  135. "Cannot convert StringDate - " + pe.getMessage(), pe);
  136. }
  137. long duration = end.getTime() - start.getTime();
  138. if (duration <0L)
  139. duration = duration * -1;
  140. return duration;
  141. }
  142. public static void main(String[] args)
  143. {
  144. try
  145. {
  146. //String result = DateUtils.getStringDateAddedTime("20081101121229",
  147. // 0, 0, 20, 2);
  148. //System.out.println(result);
  149. //System.out.println(getDurationBySeconds("20081101121229", "20091101121835"));
  150. System.out.println(getDurationByMinute("20081101121229", "20081101121329"));
  151. //System.out.println(getDurationByDay("20081101121229", "20091121121229"));
  152. }
  153. catch (Exception e)
  154. {
  155. e.printStackTrace();
  156. }
  157. }
  158. }