文档章节

项目常用工具类整理(一)--时间工具类DateUtil.java

Pig-man
 Pig-man
发布于 2016/05/11 09:54
字数 1492
阅读 515
收藏 8
点赞 3
评论 1
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {
	/**
	 * 比较日期大小
	 * @param dateStr0
	 * @param dateStr1
	 * @return
	 */
	public static int compareDate(String dateStr0, String dateStr1) {
		Date date1 = convertDateStrToDate(dateStr0, "datetime");
		Date date2 = convertDateStrToDate(dateStr1, "datetime");
		int result = date1.compareTo(date2);
		return result;
	}
	
	/**
	 * 格式化日期
	 * @param date
	 * @param pattern
	 * 		"date":返回日期(yyyy-MM-dd)
	 * 		"time":返回时间(HH:mm:ss)
	 * 		"datetime":返回日期和时间(yyyy-MM-dd HH:mm:ss)
	 * @return
	 */
	public static String formatDate(Date date, String pattern) {
		if (date == null) {
			return "";
		}
		
		if ("date".equals(pattern)) {
			pattern = "yyyy-MM-dd";
		} else if ("time".equals(pattern)) {
			pattern = "HH:mm:ss";
		} else if ("datetime".equals(pattern)) {
			pattern = "yyyy-MM-dd HH:mm:ss";
		}
		
		SimpleDateFormat formatter = new SimpleDateFormat(pattern);
		return formatter.format(date);
	}
	
	/**
	 * 格式化日期字符串
	 * @param dateStr
	 * @param type
	 * 		"date":返回日期(yyyy-MM-dd)
	 * 		"time":返回时间(HH:mm:ss)
	 * 		"datetime":返回日期和时间(yyyy-MM-dd HH:mm:ss)
	 * @return
	 */
	public static String formatDate(String dateStr, String type) {
		if (dateStr == null || "".equals(dateStr.trim())) {
			return "";
		}
		
		DateFormat formatter = DateFormat.getDateInstance();
		Date date = null;
		try {
			date = formatter.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return formatDate(date, type);
	}
	
	/**
	 * 把日期字符串转换成日期
	 * @param dateStr
	 * 		日期字符串
	 * @param pattern
	 * 		"date":日期,
	 * 		"datetime":日期和时间
	 * @return
	 */
	public static Date convertDateStrToDate(String dateStr, String pattern) {
		if (dateStr == null || "".equals(dateStr.trim())) {
			return null;
		}
		if (!dateStr.contains(":")) {
			dateStr += " 00:00:00";
		}
		
		if ("date".equals(pattern)) {
			pattern = "yyyy-MM-dd";
		} else if ("datetime".equals(pattern)) {
			pattern = "yyyy-MM-dd HH:mm:ss";
		}
		SimpleDateFormat formatter = new SimpleDateFormat(pattern);
		Date date = null;
		try {
			date = formatter.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	
	/**
	 * 获取当前时间
	 * @return
	 */
	public static Date getCurrTime() {
		return new Date();
	}
	
	/**
	 * 获取当前时间
	 * @param pattern
	 * 		"date":返回日期(yyyy-MM-dd),
	 * 		"time":返回时间(HH:mm:ss),
	 * 		"datetime":返回日期和时间(yyyy-MM-dd HH:mm:ss)
	 * @return
	 */
	public static String getCurrTime(String pattern) {
		return formatDate(new Date(), pattern);
	}
	
	/**
	 * 获取中文格式当前日期
	 * @param pattern
	 * 		"long":1984年10月9日
	 * 		"full":1984年10月9日 星期二
	 * @return
	 */
	public static String getCurrDateCN(String pattern) {
		Calendar calendar = Calendar.getInstance();
		int year = calendar.get(Calendar.YEAR);
		int month = calendar.get(Calendar.MONTH) + 1;
		int day = calendar.get(Calendar.DAY_OF_MONTH);
		
		if ("long".equals(pattern)) {
			return year + "年" + month + "月" + day + "日";
		}
		if ("full".equals(pattern)) {
			return year + "年" + month + "月" + day + "日 " + getDayCN(calendar.getTime());
		}
		return "";
	}
	
	/**
	 * 在原日期加一段时间间隔
	 * @param date
	 * 		原日期
	 * @param field
	 * 		"yyyy":年
	 * 		"MM":月
	 * 		"dd":日
	 * @param amount
	 * 		间隔长度
	 * @return
	 */
	public static Date dateAdd(Date date, String field, int amount) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		
		if ("yyyy".equals(field)) {
			calendar.add(Calendar.YEAR, amount);
		} else if ("MM".equals(field)) {
			calendar.add(Calendar.MONTH, amount);
		} else if ("dd".equals(field)) {
			calendar.add(Calendar.DATE, amount);
		}
		return calendar.getTime();
	}
	
	/**
	 * 在原日期加一段时间间隔
	 * @param date
	 * 		原日期
	 * @param field
	 * 		"yyyy":年
	 * 		"MM":月
	 * 		"dd":日
	 * @param amount
	 * 		间隔长度
	 * @param pattern
	 * 		"date":返回日期(yyyy-MM-dd),
	 * 		"time":返回时间(HH:mm:ss),
	 * 		"datetime":返回日期和时间(yyyy-MM-dd HH:mm:ss)
	 * @return
	 */
	public static String dateAdd(String dateStr, String field, int amount, String pattern) {
		if (Tools.isEmpty(dateStr)) {
			return "";
		}
		
		Date date = convertDateStrToDate(dateStr, "datetime");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		if ("yyyy".equals(field)) {
			calendar.add(Calendar.YEAR, amount);
		} else if ("MM".equals(field)) {
			calendar.add(Calendar.MONTH, amount);
		} else if ("dd".equals(field)) {
			calendar.add(Calendar.DATE, amount);
		}
		date = calendar.getTime();
		dateStr = formatDate(date, pattern);
		return dateStr;
	}
	
	/**
	 * 计算日期差
	 * @param date1
	 * @param date2
	 * @param field
	 * 		yyyy:年
	 * 		MM:月
	 * 		dd:日
	 * @return
	 * 		date2 - date1
	 */
	public static int dateDiff(Date date1, Date date2, String field) {
		boolean flag = date1.compareTo(date2) > 0;
		if (flag) {
			Date tmp = date1;
			date1 = date2;
			date2 = tmp;
		}
		
		Calendar cal1 = Calendar.getInstance();
		cal1.setTime(date1);
		int year1 = cal1.get(Calendar.YEAR);
		int month1 = cal1.get(Calendar.MONTH);
		Calendar cal2 = Calendar.getInstance();
		cal2.setTime(date2);
		int year2 = cal2.get(Calendar.YEAR);
		int month2 = cal2.get(Calendar.MONTH);
		int yearDiff = year2- year1;
		
		int diff = 0;
		if ("yyyy".equals(field)) {
			diff = yearDiff;
		} else if ("MM".equals(field)) {
			if (yearDiff <= 0) {
				diff = month2 - month1;
			} else if (yearDiff == 1) {
				diff = 12 - month1 + month2;
			} else {
				diff = 12 - month1 + (year2 - year1 - 1) * 12 + month2;
			}
		} else if ("dd".equals(field)) {
			if (yearDiff <= 0) {
				diff = cal2.get(Calendar.DAY_OF_YEAR) - cal1.get(Calendar.DAY_OF_YEAR);
			} else if (yearDiff == 1) {
				diff = getDaysLeftOfYear(date1) + cal2.get(Calendar.DAY_OF_YEAR);
			} else {
				diff = getDaysLeftOfYear(date1);
				Calendar cal;
				for (int i = 1; i < yearDiff; i++) {
					cal = Calendar.getInstance();
					cal.setTime(dateAdd(date1, "yyyy", i));
					diff += cal.getActualMaximum(Calendar.DAY_OF_YEAR);
				}
				diff += cal2.get(Calendar.DAY_OF_YEAR);
			}
		}
		
		return flag ? -1 * diff : diff;
	}
	
	/**
	 * 计算日期差
	 * @param date1
	 * @param date2
	 * @param field
	 * 		yyyy:年
	 * 		MM:月
	 * 		dd:日
	 * @return
	 */
	public static int dateDiff(String dateStr1, String dateStr2, String field) {
		Date date1 = convertDateStrToDate(dateStr1, "date");
		Date date2 = convertDateStrToDate(dateStr2, "date");
		int dateDiff = dateDiff(date1, date2, field);
		return dateDiff;
	}
	
	/**
	 * 是否闰年
	 * @param year
	 * @return
	 */
	public static boolean isLeapYear(int year) {
		boolean flag = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
		return flag;
	}
	
	/**
	 * 是否闰年
	 * @param date
	 * @return
	 */
	public static boolean isLeapYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		boolean flag = isLeapYear(cal.get(Calendar.YEAR));
		return flag;
	}
	
	/**
	 * 计算给定日期当年总天数
	 * @param date
	 * @return
	 */
	public static int getDaysOfYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal.getActualMaximum(Calendar.DAY_OF_YEAR);
	}
	
	/**
	 * 计算给定日期当年剩余天数
	 * @param date
	 * @return
	 */
	public static int getDaysLeftOfYear(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int cnt = cal.getActualMaximum(Calendar.DAY_OF_YEAR) - cal.get(Calendar.DAY_OF_YEAR);
		return cnt;
	}
	
	/**
	 * 获得星期几(周日为1,周六为7)
	 * @param date
	 * 		给定日期
	 * @return
	 */
	public static int getDay(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.DAY_OF_WEEK);
	}
	
	/**
	 * 获得星期几(中文)
	 * @param date
	 * @return
	 */
	public static String getDayCN(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
		switch (dayOfWeek) {
			case 1:
				return "星期日";
			case 2:
				return "星期一";
			case 3:
				return "星期二";
			case 4:
				return "星期三";
			case 5:
				return "星期四";
			case 6:
				return "星期五";
			case 7:
				return "星期六";
			default:
				return "";
		}
	}
	
	/**
	 * 计算给定日期所在月的第一天
	 * @param date
	 * 		给定日期
	 * @return
	 */
	public static Date getFirstDayOfMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		return calendar.getTime();
	}
	
	/**
	 * 计算给定日期所在月的最后一天
	 * @param date
	 * 		给定日期
	 * @return
	 */
	public static Date getLastDayOfMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		return calendar.getTime();
	}
	
	/**
	 * 计算给定日期所在周的第一天(周一)
	 * @param date
	 * 		给定日期
	 * @return
	 */
	public static Date getFirstDayOfWeek(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
		dayOfWeek = dayOfWeek == Calendar.SUNDAY ? 8 : dayOfWeek;
		int dValue = Calendar.MONDAY - dayOfWeek;
		calendar.add(Calendar.DAY_OF_WEEK, dValue);
		return calendar.getTime();
	}
	
	/**
	 * 计算给定日期所在月的最后一天(周日)
	 * @param date
	 * 		给定日期
	 * @return
	 */
	public static Date getLastDayOfWeek(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
		dayOfWeek = dayOfWeek == Calendar.SUNDAY ? 8 : dayOfWeek;
		int diff = 8 - dayOfWeek;
		calendar.add(Calendar.DAY_OF_WEEK, diff);
		return calendar.getTime();
	}
	
	/**
	 * 计算月视图中展示的第一天
	 * @param date
	 * 		给定日期
	 * @return
	 */
	public static Date getFirstDayOfMonthView(Date date) {
		Date firstDayOfMonth = getFirstDayOfMonth(date);
		int dayOfWeek = getDay(firstDayOfMonth);
		int diff = Calendar.SUNDAY - dayOfWeek;
		
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(firstDayOfMonth);
		calendar.add(Calendar.DAY_OF_WEEK, diff);
		return calendar.getTime();
	}
	
	/**
	 * 计算月视图中展示的最后一天
	 * @param date
	 * 		给定日期
	 * @return
	 */
	public static Date getLastDayOfMonthView(Date date) {
		Date lastDayOfMonth = getLastDayOfMonth(date);
		int dayOfWeek = getDay(lastDayOfMonth);
		int diff = Calendar.SATURDAY - dayOfWeek;
		
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(lastDayOfMonth);
		calendar.add(Calendar.DAY_OF_WEEK, diff);
		return calendar.getTime();
	}
	
	/**
	 * 计算月视图展示行数
	 * @param date
	 * @return
	 */
	public static int getRowCntOfMonthView(Date date) {
		int dayOfWeek1 = getDay(getFirstDayOfMonth(date));
		int dayOfWeek2 = getDay(getLastDayOfMonth(date));
		
		if (dayOfWeek1 == Calendar.SUNDAY && dayOfWeek2 == Calendar.SATURDAY) {
			return 4;
		}
		if (dayOfWeek1 != Calendar.SUNDAY && dayOfWeek2 != Calendar.SATURDAY) {
			return 6;
		}
		return 5;
	}
	
	public static void main(String args[]) {
		System.out.println(DateUtil.getCurrDateCN("full"));
		System.out.println(DateUtil.getCurrDateCN("long"));
	}
}

 

© 著作权归作者所有

共有 人打赏支持
Pig-man
粉丝 19
博文 61
码字总数 46911
作品 0
青浦
程序员
加载中

评论(1)

minty
minty
你的代码能粘贴完吗?
谈谈软件的开发及成长历程

每个人身上,都有着独一无二的经历,也有着不一样的成长历程。回顾一下,从大学时期参加校网络中心从事开发工作,到目前在社会上的风雨兼程,也走过十多年的开发路程了,黄金岁月,青春年华,...

walb呀 ⋅ 2017/12/04 ⋅ 0

Python学习小白必备书籍以及源码下载、代码求助三大网站

Python小白开发入门必备的3本书籍,除了书籍小U还整理了5个程序员们常用的资源网站。 入门书籍一 《Python for data analysis》 这本书涵盖了ipython notebook、Numpy、Scipy和Pandas包的使用...

柯西带你学编程 ⋅ 05/30 ⋅ 0

j2ee应用快速开发手架--thinker

thinker(像一个思想者一样去写代码) 介绍 工作中的积累,搭建的j2ee应用快速开发手架,重点在代码重构,一些常用功能的演示,工具,插件等的整理 github gitoschina 个人博客:http://www.rg...

stroller ⋅ 2014/04/25 ⋅ 0

j2ee应用快速开发手架--thinker

thinker(像一个思想者一样去写代码) 介绍 工作中的积累,搭建的j2ee应用快速开发手架,重点在代码重构,一些常用功能的演示,工具,插件等的整理 github gitoschina 个人博客:http://www.rg...

guess ⋅ 2014/04/25 ⋅ 6

Ajava攻城师/AjavaAndroidSample

简介 zftlive,顾名思义“曾繁添的生活”,我是一个追求技术的代码狂,我的生活很单纯,占据我大部分生活的是代码,在工作之余整理/沉淀自己所学、所能,一方面可以记录一下,方便日后使用、...

Ajava攻城师 ⋅ 2015/06/30 ⋅ 0

让Java开发更简便的工具包 - feilong-core

focus on J2SE,是 feilong platform 项目的核心项目 详细的帮助文档 http://feilong-core.mydoc.io/ 1. 简介: 让你从的底层代码中脱身,; 让你的代码,、、 2. 使用feilong-core的理由: 使用f...

飞天奔月 ⋅ 2016/09/22 ⋅ 9

LibGDX 跨平台游戏开发基础教程(总目录)

本文链接: http://blog.csdn.net/xietansheng/article/details/50185655 前言 本套教程讲解了 LibGDX 的基础开发,从环境搭建,到基础 API 的使用,最后再到 2048 和 Flappy Bird 两个游戏的...

xietansheng ⋅ 2015/12/09 ⋅ 0

从零开始编写自己的C#框架(5)——三层架构介绍

三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发。   在这里为初学者们简单介绍一下三层架构:   (下面内容摘自《趣味理解:三层架构...

技术小胖子 ⋅ 2017/11/03 ⋅ 0

properties文件读写操作

随着项目的深入,为了便于项目的管理,某些常用的关键信息需要提取出来放在单独的配置文件,一般采用properties文件格式,这样当需要修改某项信息时,不会牵一发而动全身,大幅提高了程序可拓...

hi_jyf ⋅ 2016/12/12 ⋅ 0

使用Android Studio 配置Gradle 搭建远端仓库

以前我自己整理的工具类会打一个jar包,然后到处复制。自从IDE换到AS后,使用gradle导入其他工程,只要简单的一行代码,甚至还有界面化搜索功能,实在是好用的很,所以最近整理了一些工具类就...

Dean_King ⋅ 2016/11/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 16分钟前 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 48分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部