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数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...
phpDesigner 最主要的优点,就在于它的智能语法标识,让你第一时间发现错误,而不是到了最后抓头摸脑。这个功能也不仅仅是应用于PHP,对于其他语言也很适用。当然,它也附带了自己的编译器,让你可以检测脚本错误,...
社区与支持:随着时间的推移,OpenCV吸引了全球众多开发者和研究人员的参与,形成了活跃的社区。目前,OpenCV由非盈利组织OpenCV.org维护,并得到了全球开发者、研究机构以及企业的持续贡献和支持。 主要特点 跨...
•信息管理、数据处理、辅助设计、自动控制、科学计算、人工智能等基础知识 • 远程通信服务基础知识 • 常用应用系统 3.系统开发和运行知识 3.1 软件工程、软件过程改进和软件开发项目管理知识 • ...