几秒前,几分钟前,几小时前,几天前,几月前,几年前的java实现

本文提供了一个简单的相对日期格式化工具类实现,可以根据当前时间和输入的时间计算并返回一个相对时间描述,例如“1分钟前”、“昨天”等。适用于论坛、社交媒体等场景中展示友好的时间信息。

代码下载:http://www.zuidaima.com/share/1562038902000640.htm

在stackoverflow上找了一个简单的,改写了下符合需求,给大家分享下。

package com.zuidaima;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class RelativeDateFormat {

    private static final long ONE_MINUTE = 60000L;
    private static final long ONE_HOUR = 3600000L;
    private static final long ONE_DAY = 86400000L;
    private static final long ONE_WEEK = 604800000L;

    private static final String ONE_SECOND_AGO = "秒前";
    private static final String ONE_MINUTE_AGO = "分钟前";
    private static final String ONE_HOUR_AGO = "小时前";
    private static final String ONE_DAY_AGO = "天前";
    private static final String ONE_MONTH_AGO = "月前";
    private static final String ONE_YEAR_AGO = "年前";

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:m:s");
        Date date = format.parse("2013-11-11 18:35:35");
        System.out.println(format(date));
    }

    public static String format(Date date) {
        long delta = new Date().getTime() - date.getTime();
        if (delta < 1L * ONE_MINUTE) {
            long seconds = toSeconds(delta);
            return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;
        }
        if (delta < 45L * ONE_MINUTE) {
            long minutes = toMinutes(delta);
            return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;
        }
        if (delta < 24L * ONE_HOUR) {
            long hours = toHours(delta);
            return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;
        }
        if (delta < 48L * ONE_HOUR) {
            return "昨天";
        }
        if (delta < 30L * ONE_DAY) {
            long days = toDays(delta);
            return (days <= 0 ? 1 : days) + ONE_DAY_AGO;
        }
        if (delta < 12L * 4L * ONE_WEEK) {
            long months = toMonths(delta);
            return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;
        } else {
            long years = toYears(delta);
            return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;
        }
    }

    private static long toSeconds(long date) {
        return date / 1000L;
    }

    private static long toMinutes(long date) {
        return toSeconds(date) / 60L;
    }

    private static long toHours(long date) {
        return toMinutes(date) / 60L;
    }

    private static long toDays(long date) {
        return toHours(date) / 24L;
    }

    private static long toMonths(long date) {
        return toDays(date) / 30L;
    }

    private static long toYears(long date) {
        return toMonths(date) / 365L;
    }

}



需要的可以下载,可以自己修改测试代码测试。


转载请务必注明出处


import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class TimeFormatUtil { public static String getInterval(Date createAt) { // 定义最终返回的结果字符串。 String interval = null; long millisecond = new Date().getTime() - createAt.getTime(); long second = millisecond / 1000; if (second <= 0) { second = 0; } //*--------------微博体(标准) if (second == 0) { interval = "刚刚"; } else if (second < 30) { interval = second + "秒以"; } else if (second >= 30 && second < 60) { interval = "半分钟"; } else if (second >= 60 && second < 60 * 60) {//大于1分钟 小于1小时 long minute = second / 60; interval = minute + "分钟"; } else if (second >= 60 * 60 && second < 60 * 60 * 24) {//大于1小时 小于24小时 long hour = (second / 60) / 60; if (hour <= 3) { interval = hour + "小时"; } else { interval = "今" + getFormatTime(createAt, "HH:mm"); } } else if (second >= 60 * 60 * 24 && second <= 60 * 60 * 24 * 2) {//大于1D 小于2D interval = "昨" + getFormatTime(createAt, "HH:mm"); } else if (second >= 60 * 60 * 24 * 2 && second <= 60 * 60 * 24 * 7) {//大于2D小时 小于 7 long day = ((second / 60) / 60) / 24; interval = day + ""; } else if ( second <= 60 * 60 * 24 * 365 && second >= 60 * 60 * 24 * 7) {//大于7小于365 interval = getFormatTime(createAt, "MM-dd HH:mm"); } else if (second >= 60 * 60 * 24 * 365) {//大于365 interval = getFormatTime(createAt, "yyyy-MM-dd HH:mm"); } else { interval = "0"; } return interval; } public static String getFormatTime(Date date, String Sdf) { return (new SimpleDateFormat(Sdf)).format(date); } public static void main(String[] args) { try { System.out.println(getInterval(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2014-08-03 12:12:12"))); } catch (ParseException e) { e.printStackTrace(); } } }
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值