2015年10月28日水曜日

String型データのDate型データへの変換やformat変更について

初心者のプログラマが苦労することのひとつがDate型のデータの変換やformatについてだと思う。難しすぎる・・・。ということでここではDate型のデータの変換やformatについて解説してみたいと思います。

ここで、 "2015-12-12 01:01:01" というString型の文字列をDate型に変換するとしましょう。
このとき、まずSimple date formatを使ってparseをしなければいけません。
String str1 = "2015-12-12 01:01:01";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.JAPAN);
 Date date1 = sdf1.parse(str1); //ここでParseしてます。
このときのポイントはString型の "str" に入ってる日付のformat(表示形式)とSimple date formatのformatを同じにすること。言い換えると、上記の青い部分を同じ形式で記述しろということです。ここで少しでもformatが違ったり、yyyyとddが逆になっていたりするとエラーがでたりデータが狂ったりします。

ただし、秒や分などのデータを切り捨てて良いのであればその部分は記述しなくても構いません。
String str1 = "2015-12-12 01:01:01";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd", Locale.JAPAN);
Date date1 = sdf1.parse(str1); 
これでもOKですが、これだと日付のみ受け継がれ、秒や分などのデータは切り捨てられます。

parseが終わったら、ここでようやく自分の好きなformatでDate型のデータを表示することができます。よってもうひとつSimple date formatのオブジェクトを作ります。
SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy", Locale.JAPAN); //ここでようやく好きなformatを指定できます。
String strDate = sdf2.format(date1); //date1はさっきparseで作ったやつ。
System.out.println("time: " + strDate ); //そして表示する
コードは全体として以下のようになります。 :

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

public class TestTest {
public static void main(String[] args) {
try{
String str1 = "2015-12-12 01:01:01";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.JAPAN);
Date date1 = sdf1.parse(str1);

SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy", Locale.JAPAN);
String strDate = sdf2.format(date1);
System.out.println("time: " + strDate );

SimpleDateFormat sdf3 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.JAPAN);
String strDate2 = sdf3.format(date1);
System.out.println("time: " + strDate2 );

}catch(ParseException err){
   System.out.println(err);
}
}
}
実行結果。
"2015-12-12 01:01:01"というString型のデータを変換することができました。
上記のコードのようにdate1を作ればそれをもとに色々な形式に変えることができます。