▼何をしたいのか
「2016年1月1日 0時0分0秒00ミリ秒」の情報を持つDateクラスインスタンスの生成。
その後、1970 年 1 月 1 日 00:00:00 GMT からの経過時間をミリ秒数で表示。
※タイムゾーンをJSTにする処理と、ミリ秒を指定する処理が必要。
▼何が起こっているのか
入力値
1451606400000
期待値
1451574000000
どうしても合わなく困っています。
▼現状の認識・調べたこと
タイムゾーンをJSTにする処理と、ミリ秒を指定する処理が間違っているのかと思いましたが原因究明ができません。
import java.util.Date; import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.TimeZone; public class Main { public static void main(String[] args) throws ParseException{ //Dateクラスインスタンスを生成 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date day = sdf.parse("2016/1/1 0:0:0.0"); //ミリ秒を指定 Calendar c = Calendar.getInstance(); c.get(Calendar.MILLISECOND); //タイムゾーンをJSTにする処理 TimeZone t = TimeZone.getTimeZone("JST"); c.setTimeZone(t); System.out.print(day.getTime()); } }
System.out.print(day.getTime());
ですが、dayに対しては、最初の設定以外に更新していないので、2016/1/1 0:0:0.0のままですが、
それで期待通りなのでしょうか?
「期待値」はともかく「入力値」がどれを指してるのかイマイチよくわからん。(その数値をコード上で指定してる箇所はない)
普通書くなら「期待値」と「出力値」(が違うから困ってる)という話になる気がする。
「出力」ならSystem.out.print()の箇所だというのは理解できる。
ぱっと見た感じ「1451606400000」と「1451574000000」で9時間(GMTとJSTの差と同じだけ)ズレてるから、まぁタイムゾーンの指定で困ってるんだろうなとは思うけど、それ以前にこのコードの意図として「どの箇所(処理)で、それぞれどういう動作をすると思って書いたのか」まで説明をしないと、どこで間違ってるとかの指摘は難しい気が。(意図がわかんないので)
回答2件
あなたの回答
tips
プレビュー