2016-07-07 9 views
1

Ich brauche die aktuelle Zeit als HH: mm. Also schrieb ich diese Methode, um Stunden und Minuten nach dem aktuellen Datum zu erhalten:Codename One Date gibt unterschiedliche Ergebnisse auf iOS und Android

final public static String[] getArrayOfCurrentTime(){ 

    Dialog.show("", "La date est " + (new Date()).toString(), "OK", null); 
    // Android : La date est Thu Jul 07 17:00:34 CEST 2016 
    // iOS : La date est 7 Juillet 2016 

    String time = Util.split((new Date()).toString(), " ")[3]; 
    String hour = Util.split(time, ":")[0]; 
    String min = Util.split(time, ":")[1]; 
    String sec = Util.split(time, ":")[2]; 

    return new String []{hour, min, sec}; 
} 

Es scheint, dass Android gibt einen Datetime während iOS ein Datum gibt.

Folglich auf iOS bekomme ich und Array-Index außerhalb der Grenzen. Ich finde in der Dokumentation nichts über einen Unterschied im Verhalten zwischen iOS und Android bezüglich Date. Muss ich mein Ergebnis aus Millisekunden seit der Epoche berechnen, oder habe ich etwas übersehen?

+0

Ich weiß genau nichts über Codename One. Ich weiß nicht einmal was es ist. Allerdings kenne ich eine Menge über iOS-Entwicklung. Wenn Sie in iOS einfach die string -Eigenschaft eines Datums verwenden, erhalten Sie eine Datums- und Uhrzeitzeichenfolge in einem festen Format in UTC. Wenn Sie eine Datums- oder Uhrzeitzeichenfolge in einem bestimmten Format wünschen, sollten Sie wahrscheinlich ein 'NSDateFormatter'-Objekt verwenden. Da ich nichts über Codename One weiß, habe ich keine Ahnung, wie du das machen würdest, aber es sollte dir helfen, wenigstens zu suchen. –

+0

Danke Duncan C. Allerdings versuche ich so viel wie möglich zu vermeiden, nativen Code zu verwenden (siehe Codename ein Motto ist einmal schreiben [in Java] Run Everywhere)! – HelloWorld

Antwort

1
+0

Danke Chen! Ich habe noch keine Zeit, es zu testen, aber wenn Date() nur das Datum (DD MM YYYY) ausgibt, wenn es auf iOS läuft, wird es keine Zeit (HH: mm) geben, um auf dieser Plattform zu analysieren ? – HelloWorld

+1

Das Datum enthält alles, was sich auf 'toString()' bezieht, ist flockig. Persönlich würde ich L10NManager verwenden, um das Datum zu formatieren. –

+0

Danke @Shai. 'l10n.formatDateTime (new Date()))' scheint der Weg nach [CN1 Dokumentation] (https://www.codenameone.com/javadoc/com/codename1/l10n/L10NManager.html) tatsächlich zu gehen. Viel einfacher als meine Antwort unten! Ich werde es so schnell wie möglich versuchen und die akzeptierte Antwort ändern, wenn es wie erwartet funktioniert. – HelloWorld

1

Um zu analysieren, um es zu halten portable (iOS und Android) und nativen Code zu schreiben zu vermeiden ich die Berechnung machte mich nur mit Codenamen One Methoden wie unten dargestellt:

final public static String[] getArrayOfCurrentTime(){ 
    Calendar cal = new Calendar(); // current Date and time 
    long today = cal.getCurrentDate().getTime(); // only the date 
    long now = System.currentTimeMillis(); // only time 
    long minutesInDay = (now - today)/(60 * 1000); // number of minutes between midnight and now 

    int nowHours = (int) (minutesInDay/60); 
    int nowMinutes = (int) ((minutesInDay/60) % 60); 

    Dialog.show("", "L'heure est " + nowHours + ":" + nowMinutes, "OK", null); 
// (Android and iOS) L'heure est 18:10 

    return new String []{Integer.toString(nowHours), Integer.toString(nowMinutes)}; 
} 
Verwandte Themen