2017-06-20 121 views
0

我正在使用已編碼的JSON文件處理Android項目。Android:將秒轉換爲年,日,時,分,秒

所以我有這樣的:

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

而且我想轉換time在一年中,日,小時和秒。 我知道有很多話題談論我的問題,但我已經嘗試過他們沒有成功。

+1

'我已經嘗試過他們沒有success'表明您已經嘗試過的東西,所以我們可以幫助修復它。直到你顯示,我們不能相信你已經嘗試過。 –

+1

不太確定,如果我已經理解了你:你是想用時間,天,小時,分鐘,秒來表示你的'時間'變量和現在時間戳**之間的時差**嗎? –

+0

[轉換時間到目前爲止的可能的重複](https://stackoverflow.com/questions/7740972/convert-epoch-time-to-date) –

回答

0

可以是類似的;

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

非常感謝,但這並不起作用^^' 我試過別的東西,那個工作:D: Long timeConvert = Long.parseLong(time); date = new SimpleDateFormat(「dd/MM/yyyy」)。format(timeConvert); time = new SimpleDateFormat(「HH:mm:ss」)。format(timeConvert); – WizzardCat

+0

我現在試過,它正在工作 – Ozan

+0

請在長號碼後加「L」 – Ozan

0

試試這個

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

這一個是短:

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

的Android,則可以使用ThreeTen Backport,對Java 8的新的日期/時間類有很大的backport ,連同ThreeTenABP(更多關於如何使用它here)。

這個API提供的日期,比過時的DateCalendar更好工作的好辦法(老班(DateCalendarSimpleDateFormat)有lots of problems,他們正在被新的API取代)。

要想從一個時間戳值的日期(假設1388620296020毫秒從Unix紀元數),則可以使用org.threeten.bp.Instant類:

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

輸出是2014-01-01T23:51:36.020Z,因爲Instant是始終以UTC。如果你想將其轉換爲一個日期/時間在另一個時區,你可以使用org.threeten.bp.ZoneId類,並創建一個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] 

輸出將是2014-01-02T00:51:36.020+01:00[Europe/Paris](轉換爲巴黎時區相同的UTC時刻)。

請注意,API避免使用3個字母的時區名稱(如ECTCST),因爲它們是ambiguous and not standard。始終傾向於使用全名(如Europe/ParisAmerica/Los_Angeles,由IANA database定義) - 您可以通過致電ZoneId.getAvailableZoneIds()獲取所有可用名稱。

如果你要打印的日期以不同的格式,你可以使用一個org.threeten.bp.format.DateTimeFormatter(請參閱javadoc看到所有可能的格式):

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

你有整數溢出。只要使用以下(在1000恆通知「L」):

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

看到這一點: https://stackoverflow.com/a/5246444/7161543