【问题标题】:Converting a timestamp to relative time将时间戳转换为相对时间
【发布时间】:2020-01-28 13:48:36
【问题描述】:

我想使用Android 中的Javatimestamp 转换为相对时间,例如Facebook。我正在使用android.text.format.DateUtils.getRelativeTimeSpanString(),但没有得到预期的结果。

我的代码:

public static CharSequence  getTimeAgo(long timestamp) {

    return DateUtils.getRelativeTimeSpanString(timestamp, System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);

}

结果:

5 sec ago
5 min ago
5 hr ago
5 days ago

预期结果:

1 sec
5 secs
1 min
5 mins
1 hr
5 hrs
5 days
Yesterday at 11:48 pm
27 Jan at 6:52 pm
25 Aug 2019 at 7:53 pm

【问题讨论】:

    标签: java android timestamp


    【解决方案1】:

    使用这个功能:

    你只需要在这里传递时间戳

       public static String dayStringFormat(long msecs) {
            final long ONE_SECOND = 1000L;
            final long ONE_MINUTE = 60000L;
            final long ONE_HOUR = 3600000L;
            final long ONE_DAY = 86400000L;
            final long ONE_MONTH = 2592000000L;
            final long ONE_YEAR = 31536000000L;
            int gmtOffset = TimeZone.getDefault().getRawOffset();
            long currentTime = System.currentTimeMillis();
            long difference = currentTime - msecs;
            if (difference < ONE_MINUTE) {
                long timeAgo = difference / ONE_SECOND;
                int finalUnits = (int) timeAgo;
                return "Just Now"
            } else if (difference < ONE_HOUR) {
                long timeAgo = difference / ONE_MINUTE;
                int finalUnits = (int) timeAgo;
                return  finalUnits + " " + "Minutes Ago";
            } else if (difference < ONE_DAY) {
                long timeAgo = difference / ONE_HOUR;
                int finalUnits = (int) timeAgo;
                return finalUnits + " " + "Hours Ago";
            } else if (difference < ONE_MONTH) {
                long timeAgo = difference / ONE_DAY;
                int finalUnits = (int) timeAgo;
                return  finalUnits +" " + "Days Ago";
            } else if (difference < ONE_YEAR) {
                long timeAgo = difference / ONE_MONTH;
                int finalUnits = (int) timeAgo;
                return  finalUnits + " " + "Months Ago";
            } else {
                long timeAgo = difference / ONE_MONTH;
                int finalUnits = (int) timeAgo;
                return  finalUnits + "" + "Months Ago";
    
            }
        }
    

    希望这会奏效!

    【讨论】:

    • 不工作,您的代码总是显示 625 个月前。
    【解决方案2】:

    此函数将返回与Facebook相同的时间:

    public static String getTimeAgo(long time) {
    
        final DateFormat sdfTime = new SimpleDateFormat("h:mm aa", Locale.ENGLISH);
        final DateFormat sdf = new SimpleDateFormat("d MMM 'at' h:mm aa", Locale.ENGLISH);
        final DateFormat sdfY = new SimpleDateFormat("d MMM yyyy 'at' h:mm aa", Locale.ENGLISH);
    
        final int SECOND_MILLIS = 1000;
        final int MINUTE_MILLIS = 60 * SECOND_MILLIS;
        final int HOUR_MILLIS = 60 * MINUTE_MILLIS;
        final int DAY_MILLIS = 24 * HOUR_MILLIS;
    
        if (time < 1000000000000L) {
            time *= 1000;
        }
    
        Calendar today = Calendar.getInstance();
    
        Calendar timeCal = Calendar.getInstance();
        timeCal.setTimeInMillis(time);
    
        long now = System.currentTimeMillis();
        if (time > now || time <= 0) {
            return null;
        }
    
        final long diff = now - time;
        if (diff < MINUTE_MILLIS) {
            return "Just now";
        } else if (diff < 2 * MINUTE_MILLIS) {
            return "1 min";
        } else if (diff < 59 * MINUTE_MILLIS) {
            return diff / MINUTE_MILLIS + " mins";
        } else if (diff < 2 * HOUR_MILLIS) {
            return "1 hr";
        } else if (diff < 24 * HOUR_MILLIS) {
            return diff / HOUR_MILLIS + " hrs";
        } else if (diff < 48 * HOUR_MILLIS) {
            return ("Yesterday at " + capsAMtoSmall(sdfTime.format(timeCal.getTime())));
        } else if (today.get(Calendar.YEAR) == timeCal.get(Calendar.YEAR)) {
            return capsAMtoSmall(sdf.format(timeCal.getTime()));
        } else {
            return capsAMtoSmall(sdfY.format(timeCal.getTime()));
        }
    }
    

    private static String capsAMtoSmall(String time) {
        return time.replace("AM", "am").replace("PM","pm");
    }
    

    编码愉快:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-20
      • 2021-01-18
      • 2013-04-07
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多