質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

タイムゾーン

タイムゾーンは地球の各地域ごとに定義されている標準時間です。

Q&A

解決済

2回答

3705閲覧

タイムスタンプを期待値通りに出力したい

HdNu

総合スコア32

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

タイムゾーン

タイムゾーンは地球の各地域ごとに定義されている標準時間です。

0グッド

1クリップ

投稿2020/02/13 04:46

編集2020/02/13 05:48

下記の問題に取り組んでいるのですが、期待値通りの出力結果にしたいのですが中々合わせることができません

*問題文

「2016年1月1日 0時0分0秒00ミリ秒JST」の情報を持つDateクラスインスタンスを生成してください。その後、「1970 年 1月 1日 0時0分0秒00ミリ秒 GMT」 からの経過時間をミリ秒数で表示してください。

※ミリ秒を指定する処理が必要です。

※タイムゾーンをJSTに指定する必要があります。

期待値 1451574000000

出力結果 1451606400000

 import java.util.TimeZone; import java.util.Date; import java.util.Calendar; import java.text.SimpleDateFormat; import java.text.ParseException; public class Main { public static void main(String[] args)throws Exception{ TimeZone tzn = TimeZone.getTimeZone("JST"); //TimeZone変数「tzn」をうまく活用しましょう! //「2016年1月1日 0時0分0秒00ミリ秒JST」の情報を持つDateクラスインスタンスを生成 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date day = sdf.parse("2016/1/1 0:0:0"); //ミリ秒を指定する処理 Calendar cl = Calendar.getInstance(); cl.set(2016,0,1,0,0,0); cl.clear(); //タイムゾーンをJSTに指定する cl.setTimeZone(tzn); //タイムスタンプ表示 System.out.print(day.getTime()); } }

ミリ秒をうまく指定できていないと考えているのですがいかがでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/13 05:19

> 「1970 年 1月 1日 0時0分0秒00ミリ秒GMT」からの経過時間 が、ご提示のソースコードにないようですが、書き漏れですか?
HdNu

2020/02/13 05:20

出力結果が経過時間だと認識していたのですが違うのですか?
退会済みユーザー

退会済みユーザー

2020/02/13 05:24 編集

出力結果は「day」をミリ秒にした値です。
退会済みユーザー

退会済みユーザー

2020/02/13 05:33 編集

#途中で送っちゃった。。。 ”「2016年1月1日 0時0分0秒00ミリ秒JST」と「1970 年 1月 1日 0時0分0秒00ミリ秒GMT」の経過時間を取得する”と手順が必要です。
HdNu

2020/02/13 05:41

取得するというのは、タイムスタンプを表示するということで合ってますでしょうか?
quickquip

2020/02/13 05:43

実行しているのは日本にあるマシンですか?
退会済みユーザー

退会済みユーザー

2020/02/13 06:01

「取得する」と「表示する」の意味は違います。 #辞書を引きましょう ・”経過時間”って何…? ・DateクラスはTimeZoneの考慮がないので、「日本にあるマシン」なら…?
tetutetu

2020/02/13 06:04

>t.ikko様 そもそもDate.getDate()は1970/1/1 0:00:00からの「経過時間」をlong値で取得するメソッドですが 拘るところがおかしくないでしょうか。
guest

回答2

0

質問のコードは以下のコードと等価です(=使われていないコードがいっぱいあって回答者を混乱させている)。

java

1import java.text.SimpleDateFormat; 2import java.util.*; 3 4public class Main { 5 public static void main(String[] args) throws Exception { 6 //「2016年1月1日 0時0分0秒00ミリ秒JST」の情報を持つDateクラスインスタンスを生成 7 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 8 Date day = sdf.parse("2016/1/1 0:0:0"); 9 //タイムスタンプ表示 10 System.out.print(day.getTime()); 11 } 12}

https://docs.oracle.com/javase/jp/10/docs/api/java/text/DateFormat.html#parse(java.lang.String)

日付の解析の詳細については、parse(String, ParsePosition)メソッドを参照してください。

https://docs.oracle.com/javase/jp/10/docs/api/java/text/DateFormat.html#parse(java.lang.String,java.text.ParsePosition)

この解析操作は、calendarを使用してDateを生成します。

https://docs.oracle.com/javase/jp/10/docs/api/java/text/DateFormat.html#calendar

サブクラスは、このフィールドを、このDateFormatに関連付けられているLocaleに適したCalendarに初期化します。

とあるのでロケールの影響を受けます。
ロケールが日本なら期待している値が出ると思いますよ。

投稿2020/02/13 06:14

編集2020/02/13 07:18
quickquip

総合スコア11235

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

とりあえずこんな感じですかね。
結果は1451574000000になっています。

java

1import java.util.Calendar; 2import java.util.Date; 3import java.util.GregorianCalendar; 4import java.util.TimeZone; 5 6public class Main { 7 8 public static void main(String[] args) { 9 10 // 2016年1月1日 0時0分0秒00ミリ秒JST 11 Calendar cl = new GregorianCalendar(2016, 0, 1, 0, 0, 0); 12 cl.setTimeZone(TimeZone.getTimeZone("JST")); 13 14 // 「2016年1月1日 0時0分0秒00ミリ秒JST」の情報を持つDateクラスインスタンス 15 Date dt = cl.getTime(); 16 // Fri Jan 01 00:00:00 JST 2016 17 System.out.println(dt); 18 19 // 1970年1月1日0時0分0秒00ミリ秒GMT 20 Calendar oCl = new GregorianCalendar(1970, 0, 1, 0, 0, 0); 21 oCl.setTimeZone(TimeZone.getTimeZone("GMT")); 22 Date oDt = oCl.getTime(); 23 24 // ミリ秒差分 25 // 1451574000000 26 System.out.println(dt.getTime() - oDt.getTime()); 27 } 28 29}

投稿2020/02/13 06:09

編集2020/02/13 06:11
yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HdNu

2020/02/13 06:26

ご教授ありがとうございます。 出力結果Thu Dec 31 15:00:00 GMT 2015の部分を消して数字だけの表示にしたいのですが何故数字以外も出力されるのでしょうか?
yureighost

2020/02/13 06:35

new Date()とかでDateオブジェクトにして表示してるんですかね? System.out.printlnメソッドでDateクラスのオブジェクトをそのまま入れるとtoStringメソッドが実行された形式で表示され、 その結果がその数字以外の文字列も含んだ結果となっています。 お望みの形式に表示させたい場合、なんらかの処理を入れる必要があります。 ミリ秒でしたら、DateクラスのgetTimeメソッド。 他の文字列のフォーマット形式でしたらSimpleDateFormatクラスを使うのが一番早いかと思います。
tetutetu

2020/02/13 06:53

横から。 回答者様のコードを実行したのだとすれば 単にSystem.out.println(dt);があるからでは。
HdNu

2020/02/13 07:02

その部分をコメントアウトして出力したら上手く行きました。回答してくれた方感謝致します。 考え過ぎて頭が痛くなってしまったので時間を開けて再度自分で確認を行いたいと思います。
yureighost

2020/02/13 07:03

>tetutetuさん あ、なるほどそっちですね。 そちらは2016年1月1日 0時0分0秒00ミリ秒JSTのDateインスタンスが生成できていることを見せるつもりで出力しているのですが。 HdNuさんのタイムゾーン環境はGMT設定になっているみたいですね。 実行環境がJSTタイムゾーン設定であればコメントに書いてある通り、「Fri Jan 01 00:00:00 JST 2016」で表示されます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問