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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

7238閲覧

Java int型の時刻を 「HH:mm」に変換

azuapricot

総合スコア2341

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/07/16 02:38

いつもお世話になっております。
早速本題に入らせていただきます。

今回質問させていただきたいコードは以下となります。

Java

1public static void main(String[] args) throws Exception { 2 int hour = 11; 3 int minute = 1; 4 Calendar cal = Calendar.getInstance(); 5 cal.set(Calendar.HOUR, hour); 6 cal.set(Calendar.MINUTE, minute); 7 8 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 9 String str = sdf.format(cal.getTime()); 10 11 System.out.println(str); 12}

int型で 「時」と「分」を受け取るのですが、
その2つを「時:分」の形式に直すのが目的のコードとなります。

出力結果は以下となります。

11:01

現在、結果としては問題なく出力はできているのですが、
int型 → Calendar型 → Date型 → String型 と なんだか冗長な気がしています。

もちろん System.out.println("" + hour + ":" + minute); とやってしまえば簡単なのですが、それだとなんだか気持ち悪くて...(我儘)

もし現在のコードよりシンプルな方法がもしあるのであればどなたかご教授頂きたいです。
これが最善というのであれば、そう回答していただけると助かります。

宜しくお願い致します。

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

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

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

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

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

fuzzball

2019/07/16 02:58

本当にそのまま出力するだけなら余計なことはしない方がいいと思います。
guest

回答5

0

こんなのとか。

Java

1var time = LocalTime.of(hour, minute); 2var formatter = DateTimeFormatter.ofPattern("HH:mm"); 3 4System.out.println(time.format(formatter));

投稿2019/07/16 03:00

編集2019/07/16 03:02
LouiS0616

総合スコア35660

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

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

azuapricot

2019/07/16 04:10

時間だけの変換とか色々探したんですけど中々見つからなかったので大変参考になりました! ありがとうございます!
LouiS0616

2019/07/16 04:14

時:分 というフォーマットだけで良いなら文字列処理で足りますが、 もし 23, 00 ⇒ PM 11:00 とかに拡張するようならフォーマット文字列がやはり強いです。a hh:mm だけで表現できちゃいますので。
guest

0

ベストアンサー

普通に

Java

1String str = String.Format("%02d:%02d", hour, minute);

じゃダメなんですか?

※まあ遅いから敬遠する、なんて人もいますが……

投稿2019/07/16 02:51

tacsheaven

総合スコア13703

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

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

momon-ga

2019/07/16 03:05

hourとminuteの範囲が0~23、0~59の間ならこれで、十分だと思います。
azuapricot

2019/07/16 04:05

確かにこれだと1桁のときに0がつきますしめちゃめちゃシンプルですね・・・! ありがとうございます!
m.ts10806

2019/07/16 04:15

質問の最後の「なんだか気持ち悪くて...(我儘)」というコメントから「強引すぎて回避したやり方」と思い込んでました(最初に思いつくのはこれですが、できればdateformatterでやりたいのかなと)
tacsheaven

2019/07/16 04:18

どうも「いったん時間を表すオブジェクトに変換しなきゃ……」と思い込んでるのかな、という気はしたのですよね。
m.ts10806

2019/07/16 04:20

ちょっとその気持ち分かる気がします。
tacsheaven

2019/07/16 04:21

途中で使い回すことまで考慮すると、確かにいったん変換しちゃった方が使い勝手よくなるんですよね。
LouiS0616

2019/07/16 04:23

時刻としての正当性もチェックしたいのかなぁ、と書いていないことを勝手に汲み取って回答しちゃいました。
m.ts10806

2019/07/16 04:23

そうですね。hour,minがどういう風にやってくるかというのと、それをどう使うかにもよって色々なやり方を把握しておいても良さそうですね。
tacsheaven

2019/07/16 04:30

時刻としての正当性だと、TVなんかでよくある「25:30」なんて記述はどうする、って話が膨らんじゃいますけどね(w 30時間制(午前6時で切り替わり)、28時間制(午前4時で切り替わり)なんてのもあるので。
azuapricot

2019/07/16 04:30

色々考えてくださってありがとうございます・・・・ まさしくそのとおりで、一旦時間を表すオブジェクトに変換しないとなんだか正当性??みたいなものが保てないようなきがしてまして・・・ ですが今回はその日時を使って計算したり、DBに日付として入れたいわけでもなかったので、その必要性はありませんでした。 必要性はなかったのですが、時刻変換の方法を検索しても中々良い検索結果が出てこなかったので、 今回皆さんに頂いた回答結果はとても有意義なもので嬉しく思います。 どの回答も大変参考になりました!ありがとうございました!
guest

0

ミリ秒に自前で

int hour = 12; int min = 35; Date d = new Date((hour * 60 + min) * 60 * 1000); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); System.out.println(sdf.format(d));

投稿2019/07/16 03:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

String.format("%02d:%02d", (h * 60 + m) / 60, (h + 60 + m) % 60);
ではいかがでしょう?

jshell での実行例
イメージ説明

投稿2019/07/16 14:14

katoy

総合スコア22324

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

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

0

ちょっと短くなるかもしれない程度ですが、こういうやり方もできそうという感じでやってみました。

過去質問の回答で拾ってきたものを参考にちょっと改修したものです

java

1 int hour = 11; 2 int minute = 1; 3 Date inDate; 4 inDate = new GregorianCalendar( 5 2019, 6 1, 7 1, 8 hour, 9 minute 10 ).getTime(); 11 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 12 String str = sdf.format(inDate.getTime()); 13 System.out.println(str);

投稿2019/07/16 02:57

m.ts10806

総合スコア80850

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

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

m.ts10806

2019/07/16 03:00

>ちょっと短くなるかもしれない Calendarインスタンス作ってセットして→インスタンス生成時に全部セットして でもCalendarクラスでも同じことできそうだからあまり意味ないか・・
m.ts10806

2019/07/16 03:00

個人的には質問に提示されている方法が確実に結果を得られそうだなとは思ってます
退会済みユーザー

退会済みユーザー

2019/07/16 06:05

(しかし なんで2月1日なのかがきになる)
m.ts10806

2019/07/16 06:13

1月1日ですね。とりあえず固定で絶対に存在する日付を入れてみました。
LouiS0616

2019/07/16 06:16

> public GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) > Month値は0から始まる(1月は0になる)。
m.ts10806

2019/07/16 06:17

失礼・・。引用先もー1してましたね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問