JAVA实现前几秒几分钟几天前几年源码

package com.date;

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

}

时间: 2024-09-24 12:00:11

JAVA实现前几秒几分钟几天前几年源码的相关文章

Java异常封装(自己定义错误码和描述,附源码)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 真正工作了才发现,Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. 下面小宝鸽就为大家介绍一个Java异常简单封装的例子. 在给出异常分装例子之前,需要给大家普及Java里面的checked异常和unchecked异常的个概念. 一.checked异常

如何利用前7秒,让用户决定下载你的App?

国外有一个研究使用三种不同的A/B测试工具分析了5款App的统计数据,得出了以下这些有准确数据支持的结论. 在此将测试得到的结论翻译.详解,分享给大家. 4大结论 用户在App详情页上平均只花费7秒钟. 分别有9%.5%的用户会滑动浏览App竖版.横版截图. 只有1%的iOS用户.3%的安卓用户在详情页中播放预览视频. 人们几乎不会查看App全部描述.宣传文本.描述的前1-3行对转化率起着至关重要的作用. 重要的7秒钟 用户在App详情页平均浏览时间是7秒.事实上,绝大多数人在此页面待的时间甚至

java-关于c++和Java的问题,耽误几分钟的时间帮帮忙

问题描述 关于c++和Java的问题,耽误几分钟的时间帮帮忙 我是成都信息工程学院软件工程专业的大一学生,现在面临以后的方向问题,学校给我们提供了c++和Java两个学习方向,现在,我想请各位解答一下这两个方向有什么不同,课程的难度,以后的发展怎么样?请大家给小弟我解惑一下,谢谢(刚刚注册的,还没币,请大家见谅,,) 解决方案 C++难度显然高于Java,C++更加侧重于底层,Java主要是做应用层.但是目前就业面来说,显然Java更好,目前主要是J2EE和Android两个方向让Java如日中

java poi解析word问题,读取每段前自动生成的序号或目录结构

问题描述 java poi解析word问题,读取每段前自动生成的序号或目录结构 java中poi3.8 hwpfdocument 读取word 文档,没法独到word 文档每段开头的自动生成的序号 :如:一. (一). 解决方案 好像是没法自动生成序号的,你可以用vba函数编程来增加这些序号

大神求助一个js问题,获取当前时间一个小时前每隔5分钟的时间数组

问题描述 大神求助一个js问题,获取当前时间一个小时前每隔5分钟的时间数组,且分钟是5的整数,即12个时间整数例如现在21:46分就取20:45,20:50,20:55,21:00,21:05.....21:45 解决方案 解决方案二:你可不可在后台获取后,再传到前台?这样比较简单解决方案三:functiongetDateArray(endDate,splitTime,count){if(!endDate){endDate=newDate();}if(!splitTime){splitTime=

解密随机数生成器(二)——从java源码看线性同余算法

Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术的3.2.1节) 如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的 也可以调用Math.random()生成随机数 Random实例是线程安全的,但是并发使用Random实例会影响效率,可以考虑使用java.util.concurrent.ThreadL

详解Java豆瓣电影爬虫——小爬虫成长记(附源码)_java

以前也用过爬虫,比如使用nutch爬取指定种子,基于爬到的数据做搜索,还大致看过一些源码.当然,nutch对于爬虫考虑的是十分全面和细致的.每当看到屏幕上唰唰过去的爬取到的网页信息以及处理信息的时候,总感觉这很黑科技.正好这次借助梳理Spring MVC的机会,想自己弄个小爬虫,简单没关系,有些小bug也无所谓,我需要的只是一个能针对某个种子网站能爬取我想要的信息就可以了.有Exception就去解决,可能是一些API使用不当,也可能是遇到了http请求状态异常,又或是数据库读写有问题,就是在这

Java源码分析:深入探讨Iterator模式

java.util包中包含了一系列重要的集合类.本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕. 下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理. 本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很多泛型代码,为了简化问题,所以我们还是讨论1.4版本的代码. 集合类的根接口Collection Collect

Java集合源码剖析:TreeMap源码剖析

前言 本文不打算延续前几篇的风格(对所有的源码加入注释),因为要理解透TreeMap的所有源码,对博主来说,确实需要耗费大量的时间和经历,目前看来不大可能有这么多时间的投入,故这里意在通过于阅读源码对TreeMap有个宏观上的把握,并就其中一些方法的实现做比较深入的分析. 红黑树简介 TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,关于二叉排序树,参见:http://blog.csdn.net/ns_code/article/details/1982