Javaで分を時間と分(hh:mm)に変換する方法


回答:


193

あなたの時間がと呼ばれる変数にある場合 t

int hours = t / 60; //since both are ints, you get an int
int minutes = t % 60;
System.out.printf("%d:%02d", hours, minutes);

簡単にはなりませんでした


Java 8でこれを実現する方法はありますDurationか?
IgorGanapolsky 2015年

3
(負の)t可能性がある場合<0、2行目はint minutes = Math.abs(t) % 60;
wittich 2018

1
また、時間とともにamまたはpmが必要な場合は、この条件StringamOrPmを追加します。if(timeInminutes> = 720)amOrPm = "PM"; else amOrPm = "AM"; 文字列convertedTime = hours + ":" + minutes + amOrPm;
SFAH

AM / PM以外のロケールをどうするか?これは部分的な、ローカライズされていないソリューションにすぎません。
ROR

29

tl; dr

Duration.ofMinutes( 260L )
        .toString()

PT4H20M

…または…

LocalTime.MIN.plus( 
    Duration.ofMinutes( 260L ) 
).toString()

04:20

Duration

java.timeクラスには、期間を表すクラスのペアが含まれています。ザ・Durationクラスは、時間・分・秒であり、Period年月-日間です。

Duration d = Duration.ofMinutes( 260L );

Duration 部品

の各部分にアクセスします Duration呼び出してto…Part。これらのメソッドは、Java9以降で追加されました。

long days = d.toDaysPart() ;
int hours = d.toHoursPart() ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
int nanos = d.toNanosPart() ;

次に、それらのパーツから独自のストリングを組み立てることができます。

ISO 8601

ISO 8601の標準的な定義は、日付・時刻の値の書式をテキスト形式。タイムラインに接続されていない期間の場合、標準形式PnYnMnDTnHnMnSです。Pマーク始まり、およびT時間・分・秒から離れる年-月-日。つまり、1時間半はPT1H30Mです。

java.timeクラスは、文字列の解析と生成にデフォルトでISO8601形式を使用します。DurationそしてPeriodクラスは、この特定の標準形式を使用します。したがって、単にを呼び出しますtoString

String output = d.toString(); 

PT4H20M

別のフォーマットについては、メソッドを使用してJava 9以降(Java 8ではない)で独自の文字列を作成しますDuration::to…Part。または、正規表現を使用してISO 8601形式の文字列を操作する方法については、この回答を参照してください。

LocalTime

の非常にあいまいで紛らわしいクロック形式の代わりに、標準のISO8601形式を使用することを強くお勧めします04:20。しかし、あなたが主張するならば、あなたはLocalTimeクラスでハッキングすることによってこの効果を得ることができます。これは、期間が24時間を超えていない場合に機能します。

LocalTime hackUseOfClockAsDuration = LocalTime.MIN.plus( d );
String output = hackUseOfClockAsDuration.toString();

04:20


java.timeについて

java.timeフレームワークは、Java8以降に組み込まれています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスをjava.util.DateCalendar、& SimpleDateFormat

ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。

詳細については、Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。仕様はJSR310です。

java.timeクラスはどこで入手できますか?

ThreeTen-エクストラプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、java.timeへの将来の追加の可能性の証明の場です。あなたはここにいくつかの有用なクラスのような見つけることがIntervalYearWeekYearQuarter、および多くを


1
いいですね、こんなものを探していますが、「PT4H20M」や「04:20」ではなく「4h20m」や「4h20min」で結果を出したいです。なんらかのフォーマット方法を使わないといけないと思いますか?
–SEがEVILであるためaditsuは2017

@aditsuquitbecauseSEisEVIL Java 9は、Duration::to…Part私の編集で示されたメソッドをこの回答にもたらしました。それらのパーツから自分の弦を簡単に組み立てることができます。
バジルバーク

11

TimeUnitクラスを使用することもできます。あなたは定義することができます

private static final String FORMAT = "%02d:%02d:%02d";
次のようなメソッドを持つことができます:

public static String parseTime(longミリ秒){
      String.format(FORMAT、
              TimeUnit.MILLISECONDS.toHours(milliseconds)、
              TimeUnit.MILLISECONDS.toMinutes(milliseconds)-TimeUnit.HOURS.toMinutes(
              TimeUnit.MILLISECONDS.toHours(milliseconds))、
              TimeUnit.MILLISECONDS.toSeconds(milliseconds)-TimeUnit.MINUTES.toSeconds(
              TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
   }

受け入れられた回答のコードよりも少し長いことは知っていますが、私見ではそれも明確です。私はこれが好きです。
Ole VV

11

java.text.SimpleDateFormat分を時間と分に変換するために使用します

SimpleDateFormat sdf = new SimpleDateFormat("mm");

try {
    Date dt = sdf.parse("90");
    sdf = new SimpleDateFormat("HH:mm");
    System.out.println(sdf.format(dt));
} catch (ParseException e) {
    e.printStackTrace();
}

2

このようにすることができます

        int totalMinutesInt = Integer.valueOf(totalMinutes.toString());

        int hours = totalMinutesInt / 60;
        int hoursToDisplay = hours;

        if (hours > 12) {
            hoursToDisplay = hoursToDisplay - 12;
        }

        int minutesToDisplay = totalMinutesInt - (hours * 60);

        String minToDisplay = null;
        if(minutesToDisplay == 0 ) minToDisplay = "00";     
        else if( minutesToDisplay < 10 ) minToDisplay = "0" + minutesToDisplay ;
        else minToDisplay = "" + minutesToDisplay ;

        String displayValue = hoursToDisplay + ":" + minToDisplay;

        if (hours < 12)
            displayValue = displayValue + " AM";
        else
            displayValue = displayValue + " PM";

        return displayValue;
    } catch (Exception e) {
        LOGGER.error("Error while converting currency.");
    }
    return totalMinutes.toString();


1
それは通貨と何の関係がありますか?
fdermishin

2

(Kotlinの場合)回答をTextViewなどに入力する場合は、代わりに文字列リソースを使用できます。

<string name="time">%02d:%02d</string>

次に、この文字列リソースを使用して、実行時に次を使用してテキストを設定できます。

private fun setTime(time: Int) {
    val hour = time / 60
    val min = time % 60
    main_time.text = getString(R.string.time, hour, min)
}

1

私は自分のプロジェクトにこの関数を使用しています:

 public static String minuteToTime(int minute) {
    int hour = minute / 60;
    minute %= 60;
    String p = "AM";
    if (hour >= 12) {
        hour %= 12;
        p = "PM";
    }
    if (hour == 0) {
        hour = 12;
    }
    return (hour < 10 ? "0" + hour : hour) + ":" + (minute < 10 ? "0" + minute : minute) + " " + p;
}

1

ここで変換aの私の関数であるsecondmillisecondday,hour,minute,second

public static String millisecondToFullTime(long millisecond) {
    return timeUnitToFullTime(millisecond, TimeUnit.MILLISECONDS);
}

public static String secondToFullTime(long second) {
    return timeUnitToFullTime(second, TimeUnit.SECONDS);
}

public static String timeUnitToFullTime(long time, TimeUnit timeUnit) {
    long day = timeUnit.toDays(time);
    long hour = timeUnit.toHours(time) % 24;
    long minute = timeUnit.toMinutes(time) % 60;
    long second = timeUnit.toSeconds(time) % 60;
    if (day > 0) {
        return String.format("%dday %02d:%02d:%02d", day, hour, minute, second);
    } else if (hour > 0) {
        return String.format("%d:%02d:%02d", hour, minute, second);
    } else if (minute > 0) {
        return String.format("%d:%02d", minute, second);
    } else {
        return String.format("%02d", second);
    }
}

テスト

public static void main(String[] args) {
    System.out.println("60 => " + secondToFullTime(60));
    System.out.println("101 => " + secondToFullTime(101));
    System.out.println("601 => " + secondToFullTime(601));
    System.out.println("7601 => " + secondToFullTime(7601));
    System.out.println("36001 => " + secondToFullTime(36001));
    System.out.println("86401 => " + secondToFullTime(86401));
}

出力

60 => 1:00
101 => 1:41
601 => 10:01
7601 => 2:06:41
36001 => 10:00:01
86401 => 1day 00:00:01

お役に立てば幸いです



-1
long d1Ms=asa.getTime();   
long d2Ms=asa2.getTime();   
long minute = Math.abs((d1Ms-d2Ms)/60000);   
int Hours = (int)minute/60;     
int Minutes = (int)minute%60;     
stUr.setText(Hours+":"+Minutes); 

上記の2つは、presistion番号を抑制します
開発者

-1

このコードを試してください:

import java.util.Scanner;

public class BasicElement {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int hours;
        System.out.print("Enter the hours to convert:");
        hours =input.nextInt();
        int d=hours/24;
        int m=hours%24;
        System.out.println(d+"days"+" "+m+"hours");     

    }
}

2
それは数分から数時間と数分でした
キーザー2012年

-1

秒単位の入力が与えられると、次のようにhh:mm:ssの形式に変換できます。

int hours;
int minutes;
int seconds;
int formatHelper;

int input;


//formatHelper maximum value is 24 hours represented in seconds

formatHelper = input % (24*60*60);

//for example let's say format helper is 7500 seconds

hours = formatHelper/60*60;
minutes = formatHelper/60%60;
seconds = formatHelper%60;

//now operations above will give you result = 2hours : 5 minutes : 0 seconds;

入力が86400秒(24時間)を超える可能性があるため、formatHelperを使用しました。

入力の合計時間をhh:mm:ssで表す場合は、formatHelperを回避できます。

お役に立てば幸いです。


1
動作しません。inputが7500の場合、結果は7500時間、5分、0秒になりますが、これは明らかに間違っています。そして、質問は秒についてはまったく言及していませんでした。
fdermishin


-1
int mHours = t / 60; //since both are ints, you get an int
int mMinutes = t % 60;
System.out.printf("%d:%02d", "" +mHours, "" +mMinutes);

1
なぜあなたは、整数形式を使用している%dフォーマット文字列値に"" +mHoursして"" +mMinutes
fdermishin

-1
import java.util.Scanner;
public class Time{
    public static void main(String[]args){
        int totMins=0;
        int hours=0;
        int mins=0;
    Scanner sc= new Scanner(System.in);
    System.out.println("Enter the time in mins: ");
        totMins= sc.nextInt();
        hours=(int)(totMins/60);
        mins =(int)(totMins%60);
        System.out.printf("%d:%d",hours,mins);
    }
}

これは受け入れられた答えとどう違うのですか?
fdermishin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.