2017-09-12 42 views
-4

我得到JSON響應爲"publishedAt": "2017-09-12T01:03:08Z" ,我想格式化簡單的日期這種反應就像Aug 12-09-2017 3:08並將其設置爲TextView 我使用這樣的事情如何從JSON格式的日期,並將其設置爲TextView的

Date dateObj = new Date(currentNews.getTimeInString()); 

TextView dateAndTimeView = (TextView) listItemView.findViewById(R.id.date_and_time); 
     String formattedDateAndTime = formatDateAndTime(dateObj); 
     dateView.setText(formattedDate); 

private String formatDateAndTime(Date dateObj){ 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM, yyyy"); 
     return dateFormat.format(dateObj); 
    } 
+1

你到目前爲止嘗試過什麼? –

+0

請分享您的代碼嘗試。 – codyogden

+0

即使在Android上,你也試圖使用過時的類Date和SimpleDateFormat(因爲沒有更好的內建函數),我當然會警告不要使用已過時的Date(String)構造函數。更好的是,停止使用這些類並開始使用[現代Java日期和時間API](https://docs.oracle.com/javase/tutorial/datetime/)。要在Android上使用它,您需要** ThreeTenABP **,請參閱[此問題](https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project)。 –

回答

1

你試過SimpleDateFormathttps://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

類似的信息(僞代碼,這裏`噸測試)

String givenDate = "2017-09-12T01:03:08Z"; 
SimpleDateFormat sdf= new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); 
try { 
    Date date = sdf.parse(givenDate); 
    System.out.println(date); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
0

試試這個代碼。

SimpleDateFormat formatter = new SimpleDateFormat(" EEE dd-MM-yyyy HH:mm"); 
1

請使用以下方法:

public String getDateFromUTC(String ourDate) 
    { 
     try 
     { 
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
      formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 
      Date value = formatter.parse(ourDate); 

      SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy hh:mm aa"); //this format changeable 
      dateFormatter.setTimeZone(TimeZone.getDefault()); 
      ourDate = dateFormatter.format(value); 

      //Log.d("OurDate", OurDate); 
     } 
     catch (Exception e) 
     { 
      ourDate = "00-00-0000 00:00"; 
     } 
     return ourDate; 
    } 
1

TL; DR

String formattedDateAndTime = Instant.parse("2017-09-12T01:03:08Z") 
      .atZone(ZoneId.of("America/Nome")) 
      .format(DateTimeFormatter.ofPattern("EEE dd-MM-uuuu H:mm", Locale.ENGLISH)); 

時區是至關重要的

正如代碼表示,它產生Mon 11-09-2017 17:03。但是,請根據您所需的時區替換正確的地區和城市,這將反映在輸出中。如果您想使用JVM的時區設置,請使用ZoneId.systemDefault();但是,請注意,在JVM中運行的其他代碼可能會將此設置更改爲您的控制之外,因此它不是完全可靠的。

ThreeTenABP

我把我的自己的藥品,從我的評論:扔掉DateSimpleDateFormat。所以上面的代碼需要ThreeTenABP。所有的細節都在this question: How to use ThreeTenABP in Android Project

ISO 8601

我還利用這樣的事實,從您的JSON響應字符串在ISO 8601格式,它的現代日期和時間類「理解」作爲其默認。如果採用其他格式,則需要單獨分析DateTimeFormatter;但不在這裏(過時的課程,需要兩個不同的SimpleDateFormat)。

相關問題