EnumでDate変換Utilクラスを作る

いろいろな使い方があるEnumですが、Utilクラスを作るのにもつかえます!
ためしに日付を変換するUtilを作ってみました。

日付<>文字列を変換するときは、いろいろなフォーマットの日付を表す文字列に対応しなければならないので、フォーマットの定義(yyyyMMddみたいなの)をたくさん定義して、定義した分だけ同じよう名メソッドを作らなければなりません。。

ですが、Enumを使えばすっきりかけます~。

以下コードです。

DateUtil.java

package util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

// TODO: 自動生成された Javadoc
/**
* The Enum DateUtil.
*/
public enum DateUtil {

// ------------------------------
// 変換したいフォーマットを追加(start)
// ------------------------------
/** The YYYYMMDD. */
YYYYMMDD("yyyy/MM/dd"),
/** The YYYYMMDDHHMM. */
YYYYMMDDHHMM("yyyy/MM/dd hh:mm"),
/** The YYYYMMDDHHMMSS. */
YYYYMMDDHHMMSS("yyyy/MM/dd HH:mm.ss"),
/** The YYYYMMDDHHMMSSSSS. */
YYYYMMDDHHMMSSSSS("yyyy/MM/dd HH:mm.ss.SSS"),
/** The Jp_ yyyymmdd. */
JP_YYYYMMDD("yyyy年MM月dd日"),
/** The Jp_ yyyymmddhhmm. */
JP_YYYYMMDDHHMM("yyyy年MM月dd日HH時mm分"),
/** The Jp_ yyyymmddhhmmss. */
JP_YYYYMMDDHHMMSS("yyyy年MM月dd日HH時mm分ss秒");
// ------------------------------
// 変換したいフォーマットを追加(end)
// ------------------------------
/** The format. */
private String format;

/**
* Instantiates a new date util.
*
* @param format
* the format
*/
private DateUtil(String format) {
this.format = format;
}

/**
* To date.
*
* @param dateString
* the date string
* @return the date
*/
public Date toDate(String dateString) {
try {
return new SimpleDateFormat(format).parse(dateString);
} catch (ParseException e) {
// RuntimeExceptionでラップしてしまっていますが、システム共通Exceptionを投げるようにする方がいいと思います。
// 場合によって使い分けてください。
throw new RuntimeException("文字列→Dateへの変換に失敗しました(format:" + format
+ ",string:" + dateString + ")", e);
}
}

/**
* To string.
*
* @param date
* the date
* @return the string
*/
public String toString(Date date) {
return new SimpleDateFormat(format).format(date);
}

}

Main.java


package util;

import java.util.Date;

public class Main {

public static void main(String[] args) {
System.out.println("YYYYMMDD.toDate:"
+ DateUtil.YYYYMMDD.toDate("2012/1/29"));
System.out.println("YYYYMMDDHHMM.toDate:"
+ DateUtil.YYYYMMDDHHMM.toDate("2012/1/29 1:5"));
System.out.println("YYYYMMDDHHMMSS.toDate:"
+ DateUtil.YYYYMMDDHHMMSS.toDate("2012/1/29 1:5.7"));
System.out.println("YYYYMMDDHHMMSSSSS.toDate:"
+ DateUtil.YYYYMMDDHHMMSSSSS.toDate("2012/1/29 1:5.7.100"));
System.out.println("JP_YYYYMMDD.toDate:"
+ DateUtil.JP_YYYYMMDD.toDate("2012年1月29日"));
System.out.println("JP_YYYYMMDDHHMM.toDate:"
+ DateUtil.JP_YYYYMMDDHHMM.toDate("2012年1月29日1時5分"));
System.out.println("JP_YYYYMMDDHHMMSS.toDate:"
+ DateUtil.JP_YYYYMMDDHHMMSS.toDate("2012年1月29日1時5分7秒"));

System.out.println("------------------------------");
System.out.println(DateUtil.YYYYMMDD.toString(new Date()));
System.out.println(DateUtil.YYYYMMDDHHMM.toString(new Date()));
System.out.println(DateUtil.YYYYMMDDHHMMSS.toString(new Date()));
System.out.println(DateUtil.YYYYMMDDHHMMSSSSS.toString(new Date()));
System.out.println(DateUtil.JP_YYYYMMDD.toString(new Date()));
System.out.println(DateUtil.JP_YYYYMMDDHHMM.toString(new Date()));
System.out.println(DateUtil.JP_YYYYMMDDHHMMSS.toString(new Date()));

}
}



実行結果

YYYYMMDD.toDate:Sun Jan 29 00:00:00 JST 2012
YYYYMMDDHHMM.toDate:Sun Jan 29 01:05:00 JST 2012
YYYYMMDDHHMMSS.toDate:Sun Jan 29 01:05:07 JST 2012
YYYYMMDDHHMMSSSSS.toDate:Sun Jan 29 01:05:07 JST 2012
JP_YYYYMMDD.toDate:Sun Jan 29 00:00:00 JST 2012
JP_YYYYMMDDHHMM.toDate:Sun Jan 29 01:05:00 JST 2012
JP_YYYYMMDDHHMMSS.toDate:Sun Jan 29 01:05:07 JST 2012
------------------------------
2012/01/29
2012/01/29 06:27
2012/01/29 18:27.51
2012/01/29 18:27.51.073
2012年01月29日
2012年01月29日18時27分
2012年01月29日18時27分51秒


まぁこんな感じです。
DateUtilクラスでは、フォーマットを定義をして、Date<>Stringのメソッドを共通的に実装してます!
フォーマットごとにDate<>String変換メソッドを実装しなくてすむので、楽です~


※サンプルでは、toDateメソッドにて、ParseExceptionをRuntimeExceptionにラップしてしまっているので、使うときは、システムで使用しているExceptionにラップして使うようにしてください!

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

0 Response to "EnumでDate変換Utilクラスを作る"

コメントを投稿