转换日期和时间

时间:2017-09-23 21:12:49

标签: android datetime formatting data-conversion

我正在处理一个新闻应用程序,我从这个模式(2017-09-23T14:22:28Z)中获取json响应的日期和时间。

如何将此日期和时间转换为类似的内容(5秒前,10分钟前,3小时前等)? 过了24小时后,它应显示该特定新闻标题的正常日期(2017-09-23)。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以考虑使用JodaTime Library来管理所有日期,时间和日历! 以下是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

答案 2 :(得分: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)

答案 3 :(得分:0)

Joda-Time非常好。

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);
    }
  

EDIT   创建方法

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"));