2017-09-23 160 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