2017-06-20 10 views
0

Ich arbeite an einem Android-Projekt mit einer bereits codierten JSON-Datei.Android: Sekunden in Jahr, Tag, Stunden, Minuten, Sekunden umwandeln

Ich habe dies Also habe:

{ 
    "type": "Feature", 
    "properties": { 
    "mag": 1.29, 
    "place": "10km SSW of Idyllwild, CA", 
    "time": 1388620296020, 
    "updated": 1457728844428 
    } 
} 

Und ich will time im Jahr, Tag, Stunden und Sekunden konvertieren. Ich weiß, dass es viele Themen gibt, die über mein Problem sprechen, aber ich habe sie bereits ohne Erfolg ausprobiert.

+1

'ich sie schon versucht ohne success' zeigen, was Sie versucht haben, so können wir helfen, es zu reparieren . Bis Sie es zeigen, können wir nicht glauben, dass Sie es versucht haben. –

+1

Ich bin mir nicht ganz sicher, ob ich dich verstanden habe: Willst du den Zeitunterschied ** zwischen deiner 'Zeit'-Variable und jetzt-Zeitstempel ** in Jahren, Tagen, Stunden, Minuten, Sekunden ausdrücken? –

+0

Mögliches Duplikat von [Epochtzeit in Datum umrechnen] (https://stackoverflow.com/questions/7740972/convert-epoch-time-to-date) –

Antwort

0

Kann etwas wie sein;

long jsondate = 1388620296020L; 
Date dt = new Date (jsondate); 
SimpleDateFormat sd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
System.out.println(sd.format(dt)); 
+0

Vielen Dank, aber das funktioniert nicht ^^ ' Ich versuchte etwas anderes und das funktioniert: D: Long timeConvert = Long.parseLong (Zeit); Datum = neu SimpleDateFormat ("TT/MM/JJJJ"). Format (timeConvert); Zeit = neu SimpleDateFormat ("HH: mm: ss"). Format (timeConvert); – WizzardCat

+0

Ich habe es jetzt versucht und es funktioniert – Ozan

+0

Bitte fügen Sie "L" nach langer Nummer – Ozan

0

versuchen, diese

long uptime = 1388620296020; 

long days = TimeUnit.MILLISECONDS 
.toDays(uptime); 
uptime -= TimeUnit.DAYS.toMillis(days); 

long hours = TimeUnit.MILLISECONDS 
.toHours(uptime); 
uptime -= TimeUnit.HOURS.toMillis(hours); 

long minutes = TimeUnit.MILLISECONDS 
.toMinutes(uptime); 
uptime -= TimeUnit.MINUTES.toMillis(minutes); 

long seconds = TimeUnit.MILLISECONDS 
.toSeconds(uptime); 
0

Dieser ist kürzer:

long lg=1388620296020l; 
    Date date = new Date(lg); 
1

In Android, können Sie die ThreeTen Backport verwenden können, eine große Rückportierung für Java 8 das neue Datum/Zeit-Klassen zusammen mit ThreeTenABP (mehr darüber, wie man es benutzt here).

Diese API eine gute Möglichkeit bietet, mit Daten zu arbeiten, viel besser als die veralteten Date und Calendar (die alten Klassen (Date, Calendar und SimpleDateFormat) haben lots of problems und sie sind durch die neuen APIs ersetzt werden).

Um ein Datum aus einem Zeitstempel Wert zu erhalten (unter der Annahme, dass 1388620296020 die Anzahl der Millisekunden von Unix-Epoche ist), können Sie die org.threeten.bp.Instant Klasse verwenden:

// create the UTC instant from 1388620296020 
Instant instant = Instant.ofEpochMilli(1388620296020L); 
System.out.println(instant); // 2014-01-01T23:51:36.020Z 

Der Ausgang ist 2014-01-01T23:51:36.020Z, weil Instant sind immer in UTC. Wenn Sie dies zu einem Datum/Zeit in einer anderen Zeitzone konvertieren möchten, können Sie die org.threeten.bp.ZoneId Klasse verwenden und erstellen org.threeten.bp.ZonedDateTime:

ZonedDateTime z = instant.atZone(ZoneId.of("Europe/Paris")); 
System.out.println(z); // 2014-01-02T00:51:36.020+01:00[Europe/Paris] 

Der Ausgang wird 2014-01-02T00:51:36.020+01:00[Europe/Paris] (das gleiche UTC Augenblick nach Paris Zeitzone umgewandelt) werden.

Bitte beachten Sie, dass die API die Verwendung von 3-Buchstaben-Zeitzonen-Namen (wie ECT oder CST) vermeidet, weil sie sind. Verwenden Sie immer die vollständigen Namen (wie Europe/Paris oder , definiert durch IANA database) - Sie können alle verfügbaren Namen abrufen, indem Sie ZoneId.getAvailableZoneIds() aufrufen.

Wenn Sie das Datum in einem anderen Format drucken möchten, können Sie eine org.threeten.bp.format.DateTimeFormatter (bitte auf javadoc beziehen sich auf alle möglichen Formate sehen):

ZonedDateTime z = instant.atZone(ZoneId.of("Europe/Paris")); 
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss.SSS Z"); 
System.out.println(fmt.format(z)); // 02/01/2014 00:51:36.020 +0100 
0

Sie Integer-Überlauf haben.Verwenden Sie einfach die folgenden (Hinweis „L“ nach 1000 konstant):

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(seconds*1000L); 
String dateString = calendar.get(Calendar.DAY_OF_WEEK) + ", "+....... 

sehen: https://stackoverflow.com/a/5246444/7161543

Verwandte Themen