`
SuperCustomer
  • 浏览: 110977 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java日期处理常用方法

阅读更多
import java.sql.Time;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class DateUtils {

	public static final int MSEC_PRE_SECOND = 1000;
	public static final int MSEC_PRE_MINUTE = MSEC_PRE_SECOND * 60;
	public static final int MSEC_PRE_HOUR = MSEC_PRE_MINUTE * 60;
	public static final int MSEC_PRE_DAY = MSEC_PRE_HOUR * 24;

	public static final String FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss";
	public static final String FORMAT_DATETIME_ZH = "yyyy年MM月dd日 HH时mm分ss秒";
	public static final String FORMAT_DATE = "yyyy-MM-dd";
	public static final String FORMAT_DATE_ZH = "yyyy年MM月dd日";
	public static final String FORMAT_TIME = "HH:mm:ss";
	public static final String FORMAT_TIME_ZH = "HH时mm分ss秒";
	public static final String FORMAT_DAY = "E";

	public static Date getDatetime(String datestr) throws ParseException {
		return getDatetime(datestr, FORMAT_DATETIME);
	}

	/**
	 * 把日期字符串包装成java.util.Date
	 * 
	 * @param datestr
	 * @param format
	 * @return
	 * @throws ParseException
	 */
	public static Date getDatetime(String datestr, String format)
			throws ParseException {
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		return formatter.parse(datestr);
	}

	public static java.sql.Date getDate(String datestr) throws ParseException {
		return getDate(datestr, FORMAT_DATE);
	}

	/**
	 * 把日期字符串包装成java.sql.Date
	 * 
	 * @param datestr
	 * @param format
	 * @return
	 * @throws ParseException
	 */
	public static java.sql.Date getDate(String datestr, String format)
			throws ParseException {
		return new java.sql.Date(getDatetime(datestr, format).getTime());
	}

	public static Time getTime(String datestr) throws ParseException {
		return getTime(datestr, FORMAT_TIME);
	}

	/**
	 * 把日期字符串包装成java.sql.Time
	 * 
	 * @param datestr
	 * @param format
	 * @return
	 */
	public static Time getTime(String datestr, String format)
			throws ParseException {
		return new Time(getDatetime(datestr, format).getTime());
	}

	public static String formatDatetime(Date... date) {
		return formatDate(FORMAT_DATETIME, date);
	}

	public static String formatDate(Date... date) {
		return formatDate(FORMAT_DATE, date);
	}

	public static String formatTime(Date... date) {
		return formatDate(FORMAT_TIME, date);
	}

	public static String formatDay(Date... date) {
		return formatDate(FORMAT_DAY, date);
	}

	public static String formatDate(String datestr, String srcformat,
			String descformat) throws ParseException {
		return formatDate(descformat, getDatetime(datestr, srcformat));
	}

	/**
	 * 格式化日期时间
	 * 
	 * @param format
	 * @param date
	 * @return
	 */
	public static String formatDate(String format, Date... date) {
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		return formatter.format(date.length == 1 ? date[0] : new Date());
	}

	public static Date nextDate(Date... date) {
		return nextDate(1, date);
	}

	/**
	 * 计算某个日期相隔几天后的日期
	 * 
	 * @param interval
	 * @param date
	 * @return
	 */
	public static Date nextDate(int interval, Date... date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.length == 1 ? date[0] : new Date());
		calendar.add(Calendar.DATE, interval);
		return new Date(calendar.getTimeInMillis());
	}

	public static long intervalDays(String datestr, boolean... strict)
			throws ParseException {
		return intervalDays(strict.length == 1 ? strict[0] : false, getDatetime(datestr));
	}

	public static long intervalDays(String datestr, String refdatestr,
			boolean... strict) throws ParseException {
		return intervalDays(datestr, refdatestr, FORMAT_DATETIME, strict);
	}

	public static long intervalDays(String datestr, String refdatestr,
			String format, boolean... strict) throws ParseException {
		return intervalDays(strict.length == 1 ? strict[0] : false, getDatetime(datestr, format), getDatetime(refdatestr, format));
	}

	public static long intervalDays(Date... date) {
		return intervalDays(false, date);
	}

	/**
	 * 计算某个日期和参考日期之间相隔的天数
	 * 
	 * @param strict
	 *            是否严格区分时分秒
	 * @param date
	 * @return
	 */
	public static long intervalDays(boolean strict, Date... date) {
		long datetime = date[0].getTime();
		long reftime = date.length == 2 ? date[1].getTime() : new Date()
				.getTime();
		if (strict) {
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date[0]);
			Map<Integer, Integer> values = new HashMap<Integer, Integer>();
			values.put(Calendar.HOUR, 0);
			values.put(Calendar.MINUTE, 0);
			values.put(Calendar.SECOND, 0);
			values.put(Calendar.MILLISECOND, 0);
			calendar = getCalendar(values, calendar);
			datetime = calendar.getTimeInMillis();
			calendar.setTime(date.length == 2 ? date[1] : new Date());
			calendar = getCalendar(values, calendar);
			reftime = calendar.getTimeInMillis();
		}
		return (reftime - datetime) / MSEC_PRE_DAY;
	}

	public static Date firstDate(String datestr) throws ParseException {
		return firstDate(datestr, FORMAT_DATETIME);
	}

	public static Date firstDate(String datestr, String format)
			throws ParseException {
		return firstDate(getDatetime(datestr, format));
	}

	/**
	 * 获取某个月的第一天
	 * 
	 * @param date
	 * @return
	 */
	public static Date firstDate(Date... date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.length == 1 ? date[0] : new Date());
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
		return new Date(calendar.getTimeInMillis());
	}

	public static Date lastDate(String datestr) throws ParseException {
		return lastDate(datestr, FORMAT_DATETIME);
	}

	public static Date lastDate(String datestr, String format)
			throws ParseException {
		return lastDate(getDatetime(datestr, format));
	}

	/**
	 * 获取某个月的最后一天
	 * 
	 * @param date
	 * @return
	 */
	public static Date lastDate(Date... date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.length == 1 ? date[0] : new Date());
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		return new Date(calendar.getTimeInMillis());
	}

	public static int getDays(String datestr) throws ParseException {
		return getDays(datestr, FORMAT_DATETIME);
	}

	public static int getDays(String datestr, String format)
			throws ParseException {
		return getDays(getDatetime(datestr, format));
	}

	/**
	 * 获取某个月的天数
	 * 
	 * @param date
	 * @return
	 */
	public static int getDays(Date... date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.length == 1 ? date[0] : new Date());
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 设置java.util.Calendar
	 * 
	 * @param values
	 * @param calendar
	 * @return
	 */
	public static Calendar getCalendar(Map<Integer, Integer> values,
			Calendar... calendar) {
		Calendar cal = calendar.length == 1 ? calendar[0] : Calendar.getInstance();
		for (Integer key : values.keySet()) {
			cal.set(key, values.get(key));
		}
		return cal;
	}

	/**
	 * 剩余天时分秒
	 * 
	 * @param date
	 * @return
	 */
	public static Map<Integer, Integer> leftTime(Date... date) {
		Date datetime = date[0];
		Date reftime = date.length == 2 ? date[1] : new Date();
		long msec = reftime.getTime() - datetime.getTime();
		long days = msec / MSEC_PRE_DAY;
		long hours = msec % MSEC_PRE_DAY / MSEC_PRE_HOUR;
		long minutes = msec % MSEC_PRE_DAY % MSEC_PRE_HOUR / MSEC_PRE_MINUTE;
		long seconds = msec % MSEC_PRE_DAY % MSEC_PRE_HOUR % MSEC_PRE_MINUTE / MSEC_PRE_SECOND;
		Map<Integer, Integer> values = new HashMap<Integer, Integer>();
		values.put(Calendar.DAY_OF_MONTH, (int) days);
		values.put(Calendar.HOUR, (int) hours);
		values.put(Calendar.MINUTE, (int) minutes);
		values.put(Calendar.SECOND, (int) seconds);
		return values;
	}

}
 
分享到:
评论

相关推荐

    JAVA处理日期时间常用方法

    Java中的日期和时间处理是程序开发中常见的任务,涉及到各种日期和时间的计算、格式化以及比较等操作。在Java中,主要使用`java.util.Date`、`java.util.Calendar`和`java.text.SimpleDateFormat`这三个核心类来处理...

    Java日期常用操作方法工具类

    本文将重点讲解Java日期的常用操作方法,主要基于提供的`JavaDateUtil.java`文件,假设这是一个自定义的日期工具类。 首先,我们来了解`java.util.Date`。这个类在早期的Java版本中被广泛使用,但它的API设计并不...

    Java的日期格式化常用方法

    本文将深入探讨Java中日期格式化的常用方法,主要关注`SimpleDateFormat`和`java.time`包下的`DateTimeFormatter`。 首先,`SimpleDateFormat`是旧版日期时间API的一部分,尽管在Java 8之后被推荐使用新的`java....

    Java中对日期的常用处理(转)

    本文将基于标题“Java中对日期的常用处理(转)”来深入探讨Java中的日期处理,结合`DateUtil.java`这个文件名,我们可以推测这是一个包含日期处理工具类的源代码文件。 首先,Java中处理日期的最基础类是`java....

    常用代码:java日期处理

    这篇博客"常用代码:java日期处理"很可能包含了关于如何在Java中有效地处理日期的实用示例和方法。这里我们将深入探讨Java日期处理的核心概念、API和最佳实践。 1. **Java日期API的发展历程** - Java 1.0引入了`...

    java程序各种常用方法集锦

    本资源"java程序各种常用方法集锦"正是为了解决这些问题而整理的一份综合性的代码库,包含了大量实用的代码示例。下面,我们将详细探讨这些关键知识点。 1. **集合操作**: - `ArrayList`与`LinkedList`:两种最...

    Java中日期处理的代码

    通过以上分析可以看出,示例代码涵盖了 Java 日期处理的基本功能,包括日期格式的定义、日期与字符串之间的转换以及对日期进行操作的方法。这些知识点对于开发人员来说是非常实用的,能够帮助他们在实际项目中高效地...

    java中的日期处理类总结

    Java中的日期处理涉及到多个类,包括Date、Calendar、GregorianCalendar以及日期格式化类如DateFormat和SimpleDateFormat。这些类主要用于管理、操作和格式化日期和时间。以下是对这些类的详细说明: 1. **Date类**...

    Java常用日期辅助类

    在给定的标题“Java常用日期辅助类”中,我们可以推测这篇博文可能探讨了Java中的一些核心日期处理工具,如`java.util.Date`,`java.time`包中的类,以及自定义的日期助手类`DateHelper.java`。 `java.util.Date`是...

    java日期处理小结

    在Java中,日期处理是一项常见的任务,涉及到多个类和方法。本篇文章主要总结了Java中关于日期处理的基础知识,包括`java.util.Calendar`,`java.util.GregorianCalendar`以及`java.util.Date`这三个核心类。 首先...

    Java获取各种常用时间方法

    根据给定文件的信息,我们可以总结出以下关于Java中获取各种常用时间的方法的知识点: ### Java获取各种常用时间方法 在Java编程中,处理日期和时间是常见需求之一。本篇文章将详细介绍如何使用Java来获取一些常用...

    精品专题(2021-2022年收藏)JAVA处理日期时间常用方法.doc

    总的来说,Java处理日期时间的方法包括创建`Calendar`实例、修改日期字段、格式化日期输出、以及使用`SimpleDateFormat`进行日期的解析和展示。理解这些基本概念对于任何Java开发者来说都是至关重要的,特别是在处理...

    最全Java常用日期处理工具类

    2014" 专门用于处理springboard定时任务修改cron参数的日期处理方法 12.获取本月第一天(月初时间) 13.获取本月最后一天(月底时间) 以上这些方法都在该Java工具类,当然不仅仅包含这些,还有其他的很多。

    JAVA中常用类的常用方法.pdf

    JAVA中常用类的常用方法主要涵盖了java语言中基础类库的关键类以及它们提供的主要方法。以下是针对文档内容的详细解释: 1. java.lang.Object类 Object类是Java中所有类的超类,它提供了多种方法,这些方法在Java中...

    JAVA常用方法.rar

    以上仅是Java常用方法的一小部分,实际开发中还有更多如网络编程、数据库操作、日期时间处理等领域的常用方法。这些方法的理解和熟练运用,将帮助开发者更好地编写高效、稳定的Java程序。通过学习和实践,你可以不断...

    时间处理常用java

    根据给定的信息,本文将详细解释Java中时间处理的一些常用方法和技术点,这些技术点主要集中在日期和时间的创建、转换、格式化以及日期之间的计算等方面。 ### 一、使用Calendar进行日期操作 #### 1. 设置特定日期...

    java李兴华学习笔记之Java常用类库

    ### Java李兴华学习笔记之Java常用类库 #### 一、课程介绍及知识点...通过以上内容的学习,学习者不仅可以掌握Java常用类库的基本使用方法,还能进一步提高自己的编程能力,为今后更复杂的项目开发打下坚实的基础。

    java日期处理

    Java日期处理是编程中常见的需求,尤其是在开发涉及时间计算、日期格式化或事件调度的应用时。在Java中,处理日期和时间主要依赖于`java.util.Date`、`java.util.Calendar`以及自Java 8引入的`java.time`包中的类。...

    java常用的工具类整理28个

    在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定任务,如数据操作、文件处理、数学计算等。它们通常不包含实例变量,只提供静态方法服务,帮助开发者提高代码的复用性和...

    java常用系统类库实验

    实验旨在加深学生对Java预定义类的理解,掌握常用类的运用技巧,以及熟练方法覆盖(重写)的实践。实验分为三个部分,分别围绕Math类、基本类型的包装类、日期类(Date和Calendar)、以及动态数组Vector类展开。 ##...

Global site tag (gtag.js) - Google Analytics