java8判断几秒前,几分钟前,几天前

java8判断几秒前,几分钟前,几天前,第1张

看下对你是否有用

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 = formatparse("2013-11-11 18:35:35");

        Systemoutprintln(format(date));

    }

    public static String format(Date date) {

        long delta = new Date()getTime() - dategetTime();

        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;

    }

}

我检查了几遍,逻辑上没有错,结果差了两天:

原因1: 你获得的是当前天数的0小时:0分:0秒

当你做 int f = (int) ((((b/1000)/60)/60)/24); 这步的时候,最后除完了又转成整数,自动把小数去掉了,所以当前的天数,也就是今天没有算进去,所以少了一天。

解决方法:结尾+1天就可以了。 或者你把所有的换算都改成double型,然后向上取整。

2:当你做c2set(2012, 1, 1, 0, 0, 0); 这步的时候,你两个日期一减,把2012年1月1日那天也减去了,所以你又少了一天。

解决方法:改成c2set(2011, 12, 31, 0, 0, 0);或者还是结尾+1

代码如下:

1得到当前的时间

Calendar cal = CalendargetInstance();

String time=formatterformat(calgetTime());

String strEnd=timesubstring(0, 16);// 2007-10-30 09:30

2得到前一天的时间

Calendar c = CalendargetInstance();

cadd(CalendarDAY_OF_MONTH, -1);

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String mDateTime=formatterformat(cgetTime());

String strStart=mDateTimesubstring(0, 16);//2007-10-29 09:30

3得到前几天的时间

Calendar c = CalendargetInstance();

cadd(CalendarDAY_OF_MONTH, -5);//得到前5

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String mDateTime=formatterformat(cgetTime());

String strStart=mDateTimesubstring(0, 16);//2007-10-24 09:30

4得到当前时间的前几年的时间

Calendar c = CalendargetInstance();

cadd(CalendarYEAR, -5);//得到前5年

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String mDateTime=formatterformat(cgetTime());

String strStart=mDateTimesubstring(0, 16);//2002-10-24 09:30

以上就是关于java8判断几秒前,几分钟前,几天前全部的内容,包括:java8判断几秒前,几分钟前,几天前、java 两种方法获取今天属于今年的第多少天,结果不同。、如何用java 获取15分钟以前的时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10153758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存