`
fackyou200
  • 浏览: 310745 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

java 智能格式化中文时间

阅读更多
public class DateUtils {

    public static void main(String[] args) {
		DateTime dateTime = new DateTime(2015,04,05,22,10,59);
		System.out.println(formatDateTime(dateTime.toDate()));
	}
	
	
	
	public static String formatDateTime(Date date) {  
        String text;  
        long dateTime = date.getTime();  
        if (isSameMonth(dateTime)) {  
        	if (isSameDay(dateTime)) {  //当天
                Calendar calendar = GregorianCalendar.getInstance();  
                if (inOneMinute(dateTime, calendar.getTimeInMillis())) {  
                    return "刚刚";  
                } else if (inOneHour(dateTime, calendar.getTimeInMillis())) {  
                    return String.format("%d分钟前", Math.abs(dateTime - calendar.getTimeInMillis()) / 60000);  
                } else {  
                    calendar.setTime(date);  
                    int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);  
                    if (hourOfDay > 17) {  
                        text = "晚上 hh:mm";  
                    } else if (hourOfDay >= 0 && hourOfDay <= 6) {  
                        text = "凌晨 hh:mm";  
                    } else if (hourOfDay > 11 && hourOfDay <= 17) {  
                        text = "下午 hh:mm";  
                    } else {  
                        text = "上午 hh:mm";  
                    }  
                }  
            }else{//
            	DateTime d1 = DateTime.parse(DateUtil.getDateFormate(date, "yyyy-MM-dd"));
        		DateTime d2 = DateTime.parse(DateUtil.getDateFormate(new Date(), "yyyy-MM-dd"));
            	int days = Days.daysBetween(d1, d2).getDays();
            	if(days<0){
            		 return new SimpleDateFormat("M月d日 HH:mm", Locale.CHINA).format(date);
            	}else if(days==1){
            		return "昨天";
            	}else{
            		return String.format("%d天前", days);
            	}
            }
        } 
        else if (isSameYear(dateTime)) {  
            text = "M月d日 HH:mm";  
        } else {  
            text = "yyyy-MM-dd";  
        }  
        return new SimpleDateFormat(text, Locale.CHINA).format(date);  
    }  
  
    private static boolean inOneMinute(long time1, long time2) {  
        return Math.abs(time1 - time2) < 60000;  
    }  
  
    private static boolean inOneHour(long time1, long time2) {  
        return Math.abs(time1 - time2) < 3600000;  
    }  
  
    private static boolean isSameDay(long time) {  
        long startTime = floorDay(Calendar.getInstance()).getTimeInMillis();  
        long endTime = ceilDay(Calendar.getInstance()).getTimeInMillis();  
        return time > startTime && time < endTime;  
    }  
  
    private static boolean isYesterday(long time) {  
        Calendar startCal;  
        startCal = floorDay(Calendar.getInstance());  
        startCal.add(Calendar.DAY_OF_MONTH, -1);  
        long startTime = startCal.getTimeInMillis();  
  
        Calendar endCal;  
        endCal = ceilDay(Calendar.getInstance());  
        endCal.add(Calendar.DAY_OF_MONTH, -1);  
        long endTime = endCal.getTimeInMillis();  
        return time > startTime && time < endTime;  
    } 
    
    private static boolean isSameMonth(long time) { 
        Calendar startCal;  
        startCal = floorDay(Calendar.getInstance());
        startCal.add(Calendar.MONTH, 0);
        startCal.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
        long startTime = startCal.getTimeInMillis();  
  
        Calendar endCal;  
        endCal = ceilDay(Calendar.getInstance());  
        endCal.set(Calendar.DAY_OF_MONTH, endCal.getActualMaximum(Calendar.DAY_OF_MONTH));
        long endTime = endCal.getTimeInMillis(); 
        return time > startTime && time < endTime;  
    } 
  
    private static boolean isSameYear(long time) {  
        Calendar startCal;  
        startCal = floorDay(Calendar.getInstance());  
        startCal.set(Calendar.MONTH, Calendar.JANUARY);  
        startCal.set(Calendar.DAY_OF_MONTH, 1);  
        return time >= startCal.getTimeInMillis();  
    }  
  
    private static Calendar floorDay(Calendar startCal) {  
        startCal.set(Calendar.HOUR_OF_DAY, 0);  
        startCal.set(Calendar.MINUTE, 0);  
        startCal.set(Calendar.SECOND, 0);  
        startCal.set(Calendar.MILLISECOND, 0);  
        return startCal;  
    }  
  
    private static Calendar ceilDay(Calendar endCal) {  
        endCal.set(Calendar.HOUR_OF_DAY, 23);  
        endCal.set(Calendar.MINUTE, 59);  
        endCal.set(Calendar.SECOND, 59);  
        endCal.set(Calendar.MILLISECOND, 999);  
        return endCal;  
    }  

}

 

分享到:
评论

相关推荐

    Java - DateUtil 日期时间转换工具类

    智能格式化数据;获取两个时间之间的间隔;在某个时间基础上,往前推或者往后推几个年,返回[年-月-日]格式的日期;判断时间是否在时间段内;获取某年最后一天日期;在原日期的基础上增加/减少小时数;获取年份中的...

    java api 1.8中文帮助文档

    4. **日期与时间API**:通过`java.time`包提供了新的日期和时间API,取代了过时的`java.util.Date`和`java.util.Calendar`,提供了更强大和易用的时间处理功能。 5. **方法引用**:允许直接引用一个类的方法,简化了...

    Java 6.0中文参考手册(最新版).chm

    在国际化和本地化方面,Java 6.0加强了对不同语言和文化环境的支持,包括日期、时间、货币格式等,使得开发全球化的应用变得更加简单。 此外,JDBC 4.0在Java 6.0中提供自动发现和连接管理功能,增强了数据库连接的...

    java开源包6

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包9

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包4

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包101

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包5

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包8

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包10

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包3

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包1

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    Java资源包01

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    c cpp php java1.8 python3.8 中文帮助文档.zip

    4. **Java 1.8**:是Java的一个重要版本,引入了lambda表达式、函数式编程、新日期时间API等新特性。Java是一种跨平台的、面向对象的编程语言,广泛应用于企业级应用、Android移动应用开发、大数据处理等领域。 5. ...

    eclipse-yml文件格式编辑插件yedit

    3. **自动格式化**:可以一键格式化 `.yml` 文件,确保代码的整洁和规范,符合 YAML 的语法规则。 4. **智能提示**:提供智能代码补全功能,根据上下文给出建议,减少手动输入的错误和时间。 5. **错误检测**:...

    java开源包2

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包11

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包7

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    MyEclipse 6 Java EE 开发中文手册

    2. **代码编辑器**:MyEclipse的代码编辑器具有智能提示、自动格式化、错误检查等功能,能够提高开发效率。它支持Java、JSP、HTML、XML等多种编程语言,并提供了对JSF、Struts等框架的特殊支持。 3. **设计工具**:...

    SQLinForm2008

    - **代码格式化**:SQLinForm2008的核心功能是对SQL语句进行智能格式化,包括自动缩进、换行、括号对齐等,使得代码结构清晰,便于阅读和维护。 - **自定义设置**:用户可以根据需求调整各种格式化参数,如行宽...

Global site tag (gtag.js) - Google Analytics