So konvertieren Sie Minuten in Stunden und Minuten (hh: mm) in Java

81

Ich muss Minuten in Stunden und Minuten in Java konvertieren. Zum Beispiel sollte 260 4:20 sein. kann mir jemand helfen, wie man es konvertiert.

Lakshmi
quelle
24 Stunden oder 12 Stunden mit morgens und abends?
eat_a_lemon

Antworten:

193

Wenn Ihre Zeit in einer Variablen namens ist t

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

Einfacher geht es nicht

Federico klez Culloca
quelle
Gibt es eine Möglichkeit, dies mit Java 8 zu erreichen Duration?
IgorGanapolsky
2
Wenn tkann <0(negativ) sein, sollte die zweite Zeile sein int minutes = Math.abs(t) % 60;.
wittich
1
und auch wenn Sie am oder pm mit der Zeit wollen, fügen Sie diese Bedingung hinzu String amOrPm; if (timeInminutes> = 720) amOrPm = "PM"; sonst amOrPm = "AM"; String convertTime = Stunden + ":" + Minuten + amOrPm;
SFAH
Was tun mit Gebietsschemas, die nicht von AM / PM stammen? Dies ist nur eine teilweise, nicht lokalisierte Lösung.
oder
28

tl; dr

Duration.ofMinutes( 260L )
        .toString()

PT4H20M

… oder …

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

04:20

Duration

Die java.time-Klassen enthalten zwei Klassen, um Zeitspannen darzustellen. Der DurationUnterricht dauert Stunden, Minuten, Sekunden und PeriodJahre, Monate und Tage.

Duration d = Duration.ofMinutes( 260L );

Duration Teile

Greifen Sie auf jeden Teil des zu, Durationindem Sie anrufen to…Part. Diese Methoden wurden in Java 9 und höher hinzugefügt.

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

Sie können dann Ihre eigene Saite aus diesen Teilen zusammensetzen.

ISO 8601

Die Norm ISO 8601 definiert Textformate für Datums- und Uhrzeitwerte. Zum Spannen der Zeit in den Timeline ungebunden, das Standardformat ist PnYnMnDTnHnMnS. Das Pmarkiert den Anfang und das Ttrennt die Jahre-Monat-Tage von den Stunden-Minuten-Sekunden. Eineinhalb Stunden sind es also PT1H30M.

Die java.time-Klassen verwenden standardmäßig ISO 8601-Formate zum Parsen und Generieren von Zeichenfolgen. Die Klassen Durationund Periodverwenden dieses spezielle Standardformat. Also einfach anrufen toString.

String output = d.toString(); 

PT4H20M

Erstellen Sie für eine alternative Formatierung einen eigenen String in Java 9 und höher ( nicht in Java 8) mit den Duration::to…PartMethoden. In dieser Antwort finden Sie Informationen zur Verwendung von Regex zum Bearbeiten der nach ISO 8601 formatierten Zeichenfolge.

LocalTime

Ich empfehle dringend, das Standardformat ISO 8601 anstelle des äußerst mehrdeutigen und verwirrenden Taktformats von zu verwenden 04:20. Aber wenn Sie darauf bestehen, können Sie diesen Effekt erzielen, indem Sie mit der LocalTimeKlasse hacken . Dies funktioniert, wenn Ihre Dauer nicht mehr als 24 Stunden beträgt.

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

04:20


Über java.time

Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date, Calendar, & SimpleDateFormat.

Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .

Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .

Woher bekomme ich die java.time-Klassen?

Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval, YearWeek, YearQuarter, und mehr .

Basil Bourque
quelle
1
Schön, ich suche so etwas, aber ich möchte das Ergebnis als "4h 20m" oder "4h 20min" anstatt als "PT4H20M" oder "04:20" erhalten. Ich denke, ich muss eine Formatierungsmethode verwenden?
Aditsu beendet, weil SE
@aditsuquitbecauseSEisEVIL Java 9 hat die Duration::to…PartMethoden, die meine Änderungen gezeigt haben, zu dieser Antwort gebracht. Aus diesen Teilen können Sie ganz einfach Ihre eigene Saite zusammenbauen.
Basil Bourque
12

Sie können auch die TimeUnit- Klasse verwenden. Sie könnten definieren

private static final String FORMAT = "% 02d:% 02d:% 02d";
kann eine Methode haben wie:

public static String parseTime (lange Millisekunden) {
      return String.format (FORMAT,
              TimeUnit.MILLISECONDS.toHours (Millisekunden),
              TimeUnit.MILLISECONDS.toMinutes (Millisekunden) - TimeUnit.HOURS.toMinutes (
              TimeUnit.MILLISECONDS.toHours (Millisekunden)),
              TimeUnit.MILLISECONDS.toSeconds (Millisekunden) - TimeUnit.MINUTES.toSeconds (
              TimeUnit.MILLISECONDS.toMinutes (Millisekunden)));
   }}
Walters
quelle
Ich weiß, dass es etwas länger ist als der Code in der akzeptierten Antwort, aber meiner Meinung nach ist es auch klarer. Ich bevorzuge das.
Ole VV
9

Verwenden Sie java.text.SimpleDateFormatdiese Option , um Minuten in Stunden und Minuten umzurechnen

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();
}
Athar Iqbal
quelle
3

Das kann so gemacht werden

        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();
Priyanka
quelle
1
Meine
Güte
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); 
Entwickler
quelle
über zwei werden die Presistion-Nummern unterdrücken
Entwickler
1

Versuchen Sie diesen Code:

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");     

    }
}
Jayaramachandran P.
quelle
Es war Minuten bis Stunden und Minuten
Keyser
1

Bei Eingabe in Sekunden können Sie das Format hh: mm: ss wie folgt umwandeln:

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;

Ich habe formatHelper verwendet, da die Eingabe länger als 86 400 Sekunden sein kann, was 24 Stunden entspricht.

Wenn Sie möchten, dass die Gesamtzeit Ihrer Eingabe durch hh: mm: ss dargestellt wird, können Sie formatHelper einfach vermeiden.

Ich hoffe, es hilft.

LightinDarknessJava
quelle
1

Ich benutze diese Funktion für meine Projekte:

 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;
}
Shohan Ahmed Sijan
quelle
1

(In Kotlin) Wenn Sie die Antwort in eine Textansicht oder etwas anderes einfügen möchten, können Sie stattdessen eine Zeichenfolgenressource verwenden:

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

Und dann können Sie diese String-Ressource verwenden, um den Text zur Laufzeit festzulegen, indem Sie:

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

Hier ist meine Funktion zum Konvertieren von a second, millisecondinday,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);
    }
}

Testen

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));
}

Ausgabe

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

Hoffe es hilft

Phan Van Linh
quelle
0

Minuten Mod 60 gibt Stunden mit verbleibenden Minuten.

http://www.cafeaulait.org/course/week2/15.html

Ryre
quelle
Eigentlich ist es das Gegenteil, Minuten Mod 60 gibt dir die Minuten. Siehe meine Antwort
Federico klez Culloca
Du liegst richtig. Es ist ziemlich spät hier, danke für die Klarstellung!
Ryre
0

Sie haben das Wort in Ihrer Antwort vergessen:

int hours = Math.floor(t / 60); 
int minutes = t % 60;

System.out.printf("%d:%02d", hours, minutes);

Ohne sie ist Ihr Ergebnis in bestimmten Fällen falsch, wie zum Beispiel:

t = 525
hours = 8.75 

Ohne Math.floor haben wir also dieses Ergebnis: 9h45 statt 8h45.

user2389203
quelle
2
Nein, wird es nicht (es sei denn, Sie verwenden Floats zum Zählen von Sekunden ...). Beim Umwandeln von 8,75 nach int wird der Dezimalteil abgeschnitten und nicht gerundet.
ya23
0

Berechnen Sie die Minuten mit diesem Code:

long difference = new Date().getTime() - user.getUpdatedDate().getTime(); 
        int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(difference);
Pritam Panja
quelle
0

In Swift

func timeStringFrom(minutes:Double) -> String {
    return "\(Int(minutes/60)):\(Int(minutes) % 60)"
}
iCyberPaul
quelle
0
int mHours = t / 60; //since both are ints, you get an int
int mMinutes = t % 60;
System.out.printf("%d:%02d", "" +mHours, "" +mMinutes);
Jigar Patel
quelle
0
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);
    }
}
Janeth Fernando
quelle