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.
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();
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 .
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";
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);
über zwei werden die Presistion-Nummern unterdrücken
Entwickler
1
Versuchen Sie diesen Code:
import java.util.Scanner;
publicclassBasicElement{
publicstaticvoidmain(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");
}
}
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.
(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)
}
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);
import java.util.Scanner;
publicclassTime{
publicstaticvoidmain(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);
}
}
Antworten:
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
quelle
Duration
?t
kann<0
(negativ) sein, sollte die zweite Zeile seinint minutes = Math.abs(t) % 60;
.tl; dr
Duration.ofMinutes( 260L ) .toString()
… oder …
LocalTime.MIN.plus( Duration.ofMinutes( 260L ) ).toString()
Duration
Die java.time-Klassen enthalten zwei Klassen, um Zeitspannen darzustellen. Der
Duration
Unterricht dauert Stunden, Minuten, Sekunden undPeriod
Jahre, Monate und Tage.Duration d = Duration.ofMinutes( 260L );
Duration
TeileGreifen Sie auf jeden Teil des zu,
Duration
indem Sie anrufento…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
. DasP
markiert den Anfang und dasT
trennt die Jahre-Monat-Tage von den Stunden-Minuten-Sekunden. Eineinhalb Stunden sind es alsoPT1H30M
.Die java.time-Klassen verwenden standardmäßig ISO 8601-Formate zum Parsen und Generieren von Zeichenfolgen. Die Klassen
Duration
undPeriod
verwenden dieses spezielle Standardformat. Also einfach anrufentoString
.Erstellen Sie für eine alternative Formatierung einen eigenen String in Java 9 und höher ( nicht in Java 8) mit den
Duration::to…Part
Methoden. 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 derLocalTime
Klasse hacken . Dies funktioniert, wenn Ihre Dauer nicht mehr als 24 Stunden beträgt.Ü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 .quelle
Duration::to…Part
Methoden, die meine Änderungen gezeigt haben, zu dieser Antwort gebracht. Aus diesen Teilen können Sie ganz einfach Ihre eigene Saite zusammenbauen.Sie können auch die TimeUnit- Klasse verwenden. Sie könnten definieren
kann eine Methode haben wie:quelle
Verwenden Sie
java.text.SimpleDateFormat
diese Option , um Minuten in Stunden und Minuten umzurechnenSimpleDateFormat 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(); }
quelle
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();
quelle
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);
quelle
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"); } }
quelle
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.
quelle
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; }
quelle
(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) }
quelle
Hier ist meine Funktion zum Konvertieren von a
second
,millisecond
inday,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
quelle
Minuten Mod 60 gibt Stunden mit verbleibenden Minuten.
http://www.cafeaulait.org/course/week2/15.html
quelle
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.
quelle
Berechnen Sie die Minuten mit diesem Code:
long difference = new Date().getTime() - user.getUpdatedDate().getTime(); int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(difference);
quelle
In Swift
func timeStringFrom(minutes:Double) -> String { return "\(Int(minutes/60)):\(Int(minutes) % 60)" }
quelle
int mHours = t / 60; //since both are ints, you get an int int mMinutes = t % 60; System.out.printf("%d:%02d", "" +mHours, "" +mMinutes);
quelle
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); } }
quelle