プロが教えるわが家の防犯対策術!

ユーザから入力された8桁の数値をTimestamp型に変換する、下記のプログラムを作成したのですが、
例えば、"20111031"を入力して実行した時に、
最終的に出力されるデータは"2011-10-31 23:59:59.0"となります。(ミリ秒部分が"0")

これを、
"2011-10-31 23:59:59.9"(ミリ秒部分が"9"など)のように、
その日の時刻一杯になるような値に変換するには、
プログラムをどのように修正すれば良いでしょうか?



import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class TimeCheck {

public static void main(String[] args) {

String inputTime = args[0] + "235959";

DateFormat inDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
DateFormat outDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {

String oldTime = outDateFormat.format(inDateFormat.parse(inputTime));

// Timestamp型に変換
Timestamp newTime = Timestamp.valueOf(oldTime);

System.out.print(newTime);

} catch (Exception e) {

e.printStackTrace();

}
}
}

A 回答 (2件)

結果が正しく表示されるかもしれないけど。


40点くらいかなぁ。

protected static Timestamp toTimestamp(String ymd) throws ParseException {

 String old = ymd + "235959999";
 Date d = new SimpleDateFormat("yyyyMMddHHmmssSSS").parse(old);
 return new Timestamp(d.getTime());
}

Date#getTime() // return by millisecconds
を利用すれば

String -> Date -> String -> Timestamp が
String -> Date -> Timestamp となる。

さらに Date 化を減らす。

 String ymd2 = ymd.replaceAll("([\\d]{4})([\\d]{2})([\\d]{2})", "$1-$2-$3");
 String old = ymd2 + " 23:59:59.999";
 return Timestamp.valueOf(old);

となる。
    • good
    • 1
この回答へのお礼

だいぶシンプルになりましたね!
ありがとうございます。

お礼日時:2011/11/07 23:17

ちゃんとAPIに描いてあるよ。


http://java.sun.com/javase/ja/6/docs/ja/api/java …
    • good
    • 1
この回答へのお礼

ありがとうございます!下記に修正したら、目的通り実行できました

(が、プログラムとして正しいのか分かりません。。。)

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class TimeCheck {

public static void main(String[] args) {

String inputTime = args[0] + "235959999";

DateFormat inDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
DateFormat outDateFormat = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss.SSS");

try {

String oldTime = outDateFormat.format(inDateFormat.parse(inputTime));

// Timestamp型に変換
Timestamp newTime = Timestamp.valueOf(oldTime);

System.out.print(newTime);

} catch (Exception e) {

e.printStackTrace();

}
}
}

お礼日時:2011/11/02 17:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!