2017-04-15 6 views
-3

Ich habe eine Zeichenfolge .. >>String x="06:30";Android - String zu Zeit?

Wie ändert sich dieser Zeichenfolge Wert in Zeit?

und wie vergleichen Sie dies mit der aktuellen Zeit und sehen, welche kleiner ist?

Antwort

3

Wenn Sie wissen, dass die Zeit immer in diesem Format ist, müssen Sie nicht in Zeit umwandeln. Formatieren Sie stattdessen die aktuelle Uhrzeit im selben Format und vergleichen Sie einfach die Zeichenfolgen.

Da Sie android getaggt, ich nehme an, Sie haben keine Java 8:

String now = new SimpleDateFormat("HH:mm").format(new Date()); 
if (x.compareTo(now) < 0) { 
    // x is before now 
} 

Wenn Sie Java haben 8 oder die ThreeTenABP Backport, können Sie die Zeit wie dieser analysieren:

LocalTime xTime = LocalTime.parse(x, DateTimeFormatter.ofPattern("HH:mm")); 
if (xTime.isBefore(LocalTime.now())) { 
    // xTime is before now 
} 
+0

was ist, wenn der String-Wert ist alwayes ein 12h-Format, wie es zu 24 Stunden-Format zu ändern, weil 12h Vergleich funktioniert nicht richtig –

+0

nicht 12-Stunden-Skala ohne AM/PM-Suffix sein kann, wie sonst Würden Sie "06: 30" gegen die aktuelle Zeit von "3:58 PM" (PDT) vergleichen? Ist das 6:30 morgens oder abends? – Andreas

+0

Ich verstehe jetzt Tyvm Ihre Antworten halfen mir :) –

0

die Joda Zeitbibliothek verwenden:

DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm"); 
LocalTime time = fmt.parseLocalTime(x); 
LocalTime now = new LocalTime(); 
if (now.before(time)) { /* now is before time */ } 

von timezon Vorsicht Die Daten und Einstellungen für beide Zeitstempel. Im obigen Beispiel wird die lokale Zeit mit der Standardzeitzoneneinstellung angenommen.

+0

FYI, das [Joda-Time] (http://www.joda.org/joda-time/) Projekt ist jetzt in [Wartungsmodus] (https: // en .wikipedia.org/wiki/Maintenance_mode), wobei das Team die Migration zur [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) empfiehlt) Klassen. Ein großer Teil der java.time-Funktionalität wird in [* ThreeTen-Backport *] (http://www.threeten.org/threetenbp/) zurück zu Java 6 & 7 portiert. Weitere Anpassung für Android im Projekt [* ThreeTenABP *] (https://github.com/JakeWharton/ThreeTenABP). –

0

Johan Thomsen Code ist viel besser, bitte ignorieren Sie dies.

Zuerst werde ich davon ausgehen, dass Ihr Stich im Format Stunde: Minute ist.

import java.util.Calendar 

Calendar c = Calendar.getInstance(); 
int currentHour = c.get(Calendar.HOUR); 
int currentMinute = c.get(Calendar.Minute); 
String s = "06:30"; 
int hour = Integer.parseInt(s.substring(0,2)); 
int minute = Integer.parseInt(s.substring(3,5)); 

Es sollte einfach sein, Code zu schreiben, diese Werte zu vergleichen. Sie können dies tun, indem Sie entweder die Stunden und dann die Minuten vergleichen, oder indem Sie beides zu einem einzigen totalMinutes kombinieren und dann das vergleichen. Zum Beispiel:

int totalMinutes = (60*hour)+minute; 
int totalCurrentMinutes = (60*currentHour)+currentMinute; 
return totalMinutes > totalCurrentMinutes; //this will return True if the time you are testing for is greater than the current time. 
+0

Sagen, es sollte leicht zu vergleichen sein, wenn die Frage, wie man vergleicht, so nicht ganz hilfreich ist. Zumal bekannt ist, dass der Vergleich zweier Werte (Stunde und Minute) von neuen Programmierern falsch durchgeführt wurde. – Andreas

+0

Das stimmt, das habe ich gerade behoben. Danke – Meepo

+0

FYI, die lästigen alten Datum-Zeit-Klassen wie 'java.util.Date' und [' java.util.Calendar'] (https://docs.oracle.com/javase/8/docs/api/java /util/Calendar.html) sind nun [legacy] (https://en.wikipedia.org/wiki/Legacy_system), ersetzt durch [java.time] (https://docs.oracle.com/javase/8 /docs/api/java/time/package-summary.html) Klassen. Ein großer Teil der java.time-Funktionalität wird in [* ThreeTen-Backport *] (http://www.threeten.org/threetenbp/) zurück zu Java 6 & 7 portiert. Weitere Anpassung für Android im Projekt [* ThreeTenABP *] (https://github.com/JakeWharton/ThreeTenABP). –