2017-09-23 157 views
-1

我正在開發一個新聞應用程序,並從這種模式中的json響應中獲取日期和時間(2017-09-23T14:22:28Z)日期和時間轉換

如何將此日期和時間轉換爲類似的內容(5秒前,10分鐘前,3小時前等)? 過了24小時後,它應該顯示該特定新聞標題(2017-09-23)的正常日期。

回答

0

您可以使用我在聊天應用程序中實現的這段代碼。

public class Utils 
{ 
    private static final int SECOND_MILLIS = 1000; 
    private static final int MINUTE_MILLIS = 60 * SECOND_MILLIS; 
    private static final int HOUR_MILLIS = 60 * MINUTE_MILLIS; 
    private static final int DAY_MILLIS = 24 * HOUR_MILLIS; 


    public static String getTimeAgo(long time, Context ctx) { 
     if (time < 1000000000000L) { 
      // if timestamp given in seconds, convert to millis 
      time *= 1000; 
     } 

     long now = getCurrentTime(ctx); 
     if (time > now || time <= 0) { 
      return null; 
     } 

     // TODO: localize 
     final long diff = now - time; 
     if (diff < MINUTE_MILLIS) { 
      return "just now"; 
     } else if (diff < 2 * MINUTE_MILLIS) { 
      return "a minute ago"; 
     } else if (diff < 50 * MINUTE_MILLIS) { 
      return diff/MINUTE_MILLIS + " minutes ago"; 
     } else if (diff < 90 * MINUTE_MILLIS) { 
      return "an hour ago"; 
     } else if (diff < 24 * HOUR_MILLIS) { 
      return diff/HOUR_MILLIS + " hours ago"; 
     } else if (diff < 48 * HOUR_MILLIS) { 
      return "yesterday"; 
     } else { 
      return diff/DAY_MILLIS + " days ago"; 
     } 
    } 
} 

有作爲第三方庫的很多的,但你也可以參考:https://github.com/curioustechizen/android-ago

0

您可以考慮使用JodaTime庫來管理所有的日期,時間和日曆! 以下是Joda Time的一些代碼。

public boolean isAfterPayDay(DateTime datetime) { 
     if (datetime.getMonthOfYear() == 2) { // February is month 2!! 
     return datetime.getDayOfMonth() > 26; 
    } 
    return datetime.getDayOfMonth() > 28; 
    } 

    public Days daysToNewYear(LocalDate fromDate) { 
     LocalDate newYear = fromDate.plusYears(1).withDayOfYear(1); 
     return Days.daysBetween(fromDate, newYear); 
    } 

    public boolean isRentalOverdue(DateTime datetimeRented) { 
     Period rentalPeriod = new Period().withDays(2).withHours(12); 
     return datetimeRented.plus(rentalPeriod).isBeforeNow(); 
    } 

    public String getBirthMonthText(LocalDate dateOfBirth) { 
     return dateOfBirth.monthOfYear().getAsText(Locale.ENGLISH); 
    } 

檢查庫Android SpecificJava Specific及其文檔HERE

0
SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss"); 
Date stringDate = simpledateformat.parse(aDate, 0); 
DateUtils.getRelativeDateTimeString(this,d.getTime(), DateUtils.MINUTE_IN_MILLIS) 
+0

就是這樣嗎?沒有其他的 ?? – mani

0

喬達時間是相當不錯了這一點。

compile 'joda-time:joda-time:2.9.9' 


String dateTime = "2017-09-21T14:22:28Z"; 
    DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"); 
    DateTime myBirthDate = format.parseDateTime(dateTime); 
    DateTime now = new DateTime(); 
    Period period = new Period(myBirthDate, now); 
    PeriodFormatter formatter = new PeriodFormatterBuilder() 
      .appendSeconds().appendSuffix(" Sekonds ago\n") 
      .appendMinutes().appendSuffix(" Minutes ago\n") 
      .appendHours().appendSuffix(" Hours ago\n") 
      .appendDays().appendSuffix(" Days ago\n") 
      .appendWeeks().appendSuffix(" Weeks ago\n") 
      .appendMonths().appendSuffix(" Months ago\n") 
      .appendYears().appendSuffix(" Years ago\n") 
      .printZeroNever() 
      .toFormatter(); 
    if (period.getDays()<1) { 
     String result = formatter.print(period); 
     System.out.println(result); 
    } else { 
     DateTimeFormatter format24hMore = DateTimeFormat.forPattern("yyyy-MM-dd"); 
     String result = format24hMore.print(myBirthDate); 
     System.out.println(result); 
    } 

編輯 創建方法

public String convertDate(String date) { 

    String result = ""; 
    DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"); 
    DateTime from = format.parseDateTime(date); 
    DateTime now = new DateTime(); 
    Period period = new Period(from, now); 
    PeriodFormatter formatter = new PeriodFormatterBuilder() 
      .appendSeconds().appendSuffix(" Sekonds ago\n") 
      .appendMinutes().appendSuffix(" Minutes ago\n") 
      .appendHours().appendSuffix(" Hours ago\n") 
      .appendDays().appendSuffix(" Days ago\n") 
      .appendWeeks().appendSuffix(" Weeks ago\n") 
      .appendMonths().appendSuffix(" Months ago\n") 
      .appendYears().appendSuffix(" Years ago\n") 
      .printZeroNever() 
      .toFormatter(); 
    if (period.getDays()<1) { 
     result = formatter.print(period); 
    } else { 
     DateTimeFormatter format24hMore = DateTimeFormat.forPattern("yyyy-MM-dd"); 
     result = format24hMore.print(from); 

    } 
    return result; 
} 

,你可以調用此方法

System.out.println(convertDate("2017-09-21T14:22:28Z")); 
+0

我該如何應用你的代碼在我的android應用程序 – mani

+0

@mani應用這種方法就像編輯我所做的,這種方法從你的JSON響應只隱藏字符串,如果響應是在這種模式「2017-09-23T14:22:28Z」 –

+0

我應該在我的項目中導入哪些類? – mani