`

对时间的操作

 
阅读更多
package common;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 时间操作类
 * 
 * @author Administrator
 * 
 */
public class DateUtil {
	// 完整时间
	private static final DateFormat ymdhmsFormat = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss");

	// 年月日
	private static final DateFormat ymdFormat = new SimpleDateFormat(
			"yyyy-MM-dd");

	// 时分秒
	private static final DateFormat hmsFormat = new SimpleDateFormat("HH:mm:ss");

	private static final DateFormat hmFormat = new SimpleDateFormat("HH:mm");

	private static final DateFormat ymdCN = new SimpleDateFormat("yyyy年mm月dd日");

	private static final long MILLISECONDS_A_DAY = 24 * 3600 * 1000;

	public DateUtil() {
		super();
	}

	/**
	 * 返回Date的格式化日期串
	 * 
	 * @param date
	 * @return
	 */
	public static String getDateTimeStr(Date date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return format.format(date);
	}

	/**
	 * 返回当前日期字符串表示
	 * 
	 * @param patternstr
	 * @return
	 */
	public static String getCurrDateStr(String patternstr) {
		SimpleDateFormat format = new SimpleDateFormat(patternstr);
		return format.format(new Date());
	}

	/**
	 * 返回日期中的年
	 * 
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	public static int getYearOfDate(Date date) throws ParseException {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		String day = format.format(date);
		return Integer.parseInt(day.substring(0, 4));
	}

	/**
	 * 返回日期中的月
	 * 
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	public static int getMonthOfDate(Date date) throws ParseException {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		String day = format.format(date);
		return Integer.parseInt(day.substring(5, 7));
	}

	/**
	 * 返回日期中的天
	 * 
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	public static int getDayOfDate(Date date) throws ParseException {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		String day = format.format(date);
		return Integer.parseInt(day.substring(8, 10));
	}

	/**
	 * 返回pattern格式的时间字符串
	 * 
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String getDateFormat(Date date, String pattern) {
		DateFormat df = new SimpleDateFormat(pattern);
		return df.format(date);
	}

	/**
	 * 根据pattern格式构建时间
	 * 
	 * @param dateStrig
	 * @param pattern
	 * @return
	 */
	public static Date getDate(String dateStrig, String pattern) {
		DateFormat df = new SimpleDateFormat(pattern);
		try {
			return df.parse(dateStrig);
		} catch (ParseException e) {
			return null;
		}
	}

	/**
	 * 返回两个时间差值串
	 * 
	 * @param beginDate
	 *            (格式:yyyy-MM-dd HH:mm:ss)
	 * @param endDate
	 *            (格式:yyyy-MM-dd HH:mm:ss)
	 * @return
	 */
	public static String getTimeDiff(String beginDate, String endDate)
			throws ParseException {
		String result = "";
		SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		long between = 0;
		Date begin = dfs.parse(beginDate);
		Date end = dfs.parse(endDate);
		if (begin.before(end)) {
			// 除以1000是为了转换成秒
			between = (end.getTime() - begin.getTime()) / 1000;
		}
		if (begin.after(end)) {
			between = (begin.getTime() - end.getTime()) / 1000;
		}

		long day = between / (24 * 3600);
		long hour = between % (24 * 3600) / 3600;
		long minute = between % 3600 / 60;
		long second = between % 60;
		if (day > 0) {
			result = day + "天" + hour + "小时" + minute + "分" + second + "秒";
		} else {
			if (day == 0) {
				result = hour + "小时" + minute + "分" + second + "秒";
			}
			if (day == 0 && hour == 0) {
				result = minute + "分" + second + "秒";
			}
		}
		return result;
	}

	public static final String dSimpleForamtCN(String date) {
		String[] str = date.split("-");
		StringBuilder sb = new StringBuilder();
		sb.append(str[0]).append("年").append(str[1]).append("月").append(str[2])
				.append("日");
		return sb.toString();
	}

	public static final String simpleFormat(Date date) {
		if (date == null)
			return "";
		return ymdhmsFormat.format(date);
	}

	public static final String dtSimpleFormat(Date date) {
		if (date == null)
			return "";
		return ymdFormat.format(date);
	}

	public static final Date string2Date(String stringDate)
			throws ParseException {
		if (stringDate == null)
			return null;
		return ymdFormat.parse(stringDate);
	}

	/**
	 * 返回日期时间(Add by Sunzy)
	 * 
	 * @param stringDate
	 *            字符串格式的时间
	 * @return Date 字符串所对应的时间
	 * @throws ParseException
	 */
	public static final Date string2DateTime(String stringDate)
			throws ParseException {
		if (stringDate == null)
			return null;
		return ymdhmsFormat.parse(stringDate);
	}

	public static final Long string2DateLong(String stringDate)
			throws ParseException {
		Date d = string2Date(stringDate);
		if (d == null)
			return null;
		return new Long(d.getTime());
	}

	public static final String hmsFormat(Date date) {
		if (date == null)
			return "";
		return hmsFormat.format(date);
	}

	public static final String hmFormat(Date date) {
		if (date == null)
			return "";
		return hmFormat.format(date);
	}

	/*
	 * 系统时间的转换,当前时间
	 */
	public static String getSystemDate() {
		return ymdFormat.format(new Date()).toString();
	}

	/*
	 * 系统时间的转换年
	 */
	public static String getSystemDateYear() {
		SimpleDateFormat temp = new SimpleDateFormat("yyyy");
		return temp.format(new Date()).toString();
	}

	/*
	 * 系统时间的转换有分秒的
	 */
	public static String getSystemDateall() {
		return ymdhmsFormat.format(new Date()).toString();
	}

	/*
	 * 返回两个时间相差的天数 checkPoint 是比较的类型,它的值可以从Calendar中取看
	 */
	public static int compareDate(Date date1, Date date2, int checkPoint) {
		Calendar cal1 = GregorianCalendar.getInstance();
		Calendar cal2 = GregorianCalendar.getInstance();
		cal1.setTime(date1);
		cal2.setTime(date2);
		if (checkPoint == Calendar.MONTH) {
			// 比较月份
			int year1 = cal1.get(Calendar.YEAR);
			int month1 = cal1.get(Calendar.MONTH);
			int year2 = cal2.get(Calendar.YEAR);
			int month2 = cal2.get(Calendar.MONTH);

			return ((year1 * 12) + month1) - ((year2 * 12) + month2);
		} else if (checkPoint == Calendar.DAY_OF_YEAR) {
			// 比较天
			long quot = 0;
			Date eDate = dateOnly(date1);
			Date sDate = dateOnly(date2);
			quot = eDate.getTime() - sDate.getTime();
			quot = quot / MILLISECONDS_A_DAY;
			return (int) quot;

		} else if (checkPoint == Calendar.WEEK_OF_YEAR) {
			// 比较周
		}

		throw new java.lang.UnsupportedOperationException(
				"Not yet implemented.");
	}

	/**
	 * 只取当前时间的日期部分,小时、分、秒等字段归零.
	 * 
	 * @param date
	 *            需要处理的时间对象
	 * @return 小时、分、秒等字段归零后的日期对象
	 */
	public static Date dateOnly(final Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		return cal.getTime();
	}

	public static int compareTime(Date date1, Date date2) {
		Calendar cal1 = GregorianCalendar.getInstance();
		Calendar cal2 = GregorianCalendar.getInstance();
		cal1.setTime(date1);
		cal2.setTime(date2);
		return (int) getResutlTime((double) (cal1.getTimeInMillis() - cal2
				.getTimeInMillis()) / 1000d);
	}

	// 判断天数是否比一天多小时分,秒,如果是的话,就算一天
	public static int getResutlTime(double day) {
		int temp = String.valueOf(day).indexOf(".");
		if (temp == -1) {
			temp = String.valueOf(day).length();
		}
		if (Integer.parseInt(String.valueOf(day).substring(0, temp)) > 0) {
			// return (int) (day + 1);
			return (int) day;
		} else {
			return (int) day;
		}
	}

	/*
	 * 在一特定的时间内加上n个月后得到的时间
	 */
	public static Date addDateMonth(Date gmtUpload, BigDecimal period) {
		Calendar cal = GregorianCalendar.getInstance();
		cal.setTime(gmtUpload);
		int month = cal.get(Calendar.MONTH) + 1;
		int addyear = 0;
		int addmonth = 0;
		if (period.intValue() > 12) {
			addyear = period.intValue() / 12;
			addmonth = period.intValue() % 12;
			if ((month + addmonth) > 12) {
				addyear = addyear + 1;
				addmonth = addmonth + month - 12;
			} else {
				addmonth = addmonth + month;
			}
		}
		cal.add(Calendar.YEAR, addyear);
		cal.add(Calendar.MONTH, addmonth);
		return cal.getTime();
	}

	/**
	 * 在一个特定的时间后加上n天
	 * 
	 * @param time
	 *            特定时间
	 * @param period
	 *            向后或者向前的参数 -2 , 2
	 * @return Date
	 */
	public static Date addDateDay(Date time, int period) {
		Calendar cal = new GregorianCalendar();
		cal.setTime(time);
		cal.add(GregorianCalendar.DATE, period);
		return cal.getTime();

	}

	// 判断闰年
	public static boolean CheckLeap(int year) {
		if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
			return true;
		else
			return false;
	}

	/*
	 * 删除时间的"-"
	 */
	public static String Delete(String something) {
		String dealwithsomething = "";
		int tempflag = 0;
		int temp = 0;
		for (int i = 0; i < 2; i++) {
			tempflag = something.indexOf("-", temp);
			dealwithsomething = dealwithsomething
					+ something.substring(temp, tempflag).trim();
			temp = tempflag + 1;
			if (i == 1) {
				dealwithsomething = dealwithsomething
						+ something.substring(temp).trim();
			}
		}
		return dealwithsomething;
	}

	// /**
	// * 相当于数据库中的AddMonth函数,返回值精确到秒
	// *
	// *@param theDate Description of the Parameter
	// *@param offset Description of the Parameter
	// *@return The specialDate value
	// */
	// public static Date addMonth(Date theDate, int offset) {
	// int theYear = NumberUtil.getInt(StringUtil.formatDate(theDate, "yyyy"));
	// int theMonth = NumberUtil.getInt(StringUtil.formatDate(theDate, "MM"));
	// int theDay = NumberUtil.getInt(StringUtil.formatDate(theDate, "dd"));
	// int theHour = NumberUtil.getInt(StringUtil.formatDate(theDate, "HH"));
	// int theMinute = NumberUtil.getInt(StringUtil.formatDate(theDate, "mm"));
	// int theSecond = NumberUtil.getInt(StringUtil.formatDate(theDate, "ss"));
	//
	// return new Date(theYear - 1900, theMonth + offset - 1, theDay, theHour,
	// theMinute, theSecond);
	// }

	public static String trans(String str, String delim) {
		return str.replace("-", delim);
	}

	/**
	 * 当月第一天.
	 * 
	 * @param year
	 *            int
	 * @param month
	 *            int
	 * @return date Date
	 */
	public static Date getFirstDayOfMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		return cal.getTime();
	}

	/**
	 * 当月最后一天.
	 * 
	 * @param year
	 *            int
	 * @param month
	 *            int
	 * @return date Date
	 */
	public static Date getLastDayOfMonth(int year, int month) {
		int day = 0;
		switch (month) {
		case 0:
			day = 31;
		case 2:
			day = 31;
		case 4:
			day = 31;
		case 6:
			day = 31;
		case 7:
			day = 31;
		case 9:
			day = 31;
		case 11:
			day = 31;
			break;
		case 3:
			day = 30;
		case 5:
			day = 30;
		case 8:
			day = 30;
		case 10:
			day = 30;
			break;
		case 1:
			day = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 29
					: 28;
			break;
		}
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month);
		cal.set(Calendar.DAY_OF_MONTH, day);
		return cal.getTime();
	}

	/**
	 * 下月第一天.
	 * 
	 * @param year
	 *            int
	 * @param month
	 *            int
	 * @return date Date
	 */
	public static Date getFirstDayOfNextMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month + 1);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		return cal.getTime();
	}

	/**
	 * 下月最后一天.
	 * 
	 * @param year
	 *            int
	 * @param month
	 *            int
	 * @return date Date
	 */
	public static Date getLastDayOfNextMonth(int year, int month) {
		int day = 0;
		int nextMonth = month + 1;
		switch (nextMonth) {
		case 0:
			day = 31;
		case 2:
			day = 31;
		case 4:
			day = 31;
		case 6:
			day = 31;
		case 7:
			day = 31;
		case 9:
			day = 31;
		case 11:
			day = 31;
			break;
		case 3:
			day = 30;
		case 5:
			day = 30;
		case 8:
			day = 30;
		case 10:
			day = 30;
			break;
		case 1:
			day = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 29
					: 28;
			break;
		}
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, nextMonth);
		cal.set(Calendar.DAY_OF_MONTH, day);
		return cal.getTime();
	}

	public static Date getFixDate(Date now, int day) {
		if (now != null) {
			Calendar cal = Calendar.getInstance();
			cal.setTime(now);
			int dayOfAdd = cal.get(Calendar.DAY_OF_YEAR) + day;
			cal.set(Calendar.DAY_OF_YEAR, dayOfAdd);
			return cal.getTime();
		}
		return null;
	}

	/**
	 * 默认本月时间(年-月)
	 * 
	 * @return
	 */
	public static String getDefaultStrDate() {
		Calendar c = Calendar.getInstance();
		int month = c.get(c.MONTH) + 1;
		if (month < 10) {
			return c.get(Calendar.YEAR) + "-" + "0" + month;
		} else {
			return c.get(Calendar.YEAR) + "-" + month;
		}

	}

	/**
	 * 默认本月时间(年-月-日)
	 * 
	 * @return
	 */
	public static Date getThisMonthFirstDate() {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.DATE, 1);
		return c.getTime();
	}

	public static String getLastStrDate() {
		Calendar c = Calendar.getInstance();
		int month = c.get(c.MONTH) + 1;
		int year = c.get(Calendar.YEAR);
		if (month < 10) {
			if (month == 1) {
				month = 12;
				year = year - 1;
				return year + "-" + month;
			}
			month = month - 1;
			return year + "-" + "0" + month;
		} else {
			month = month - 1;
			return year + "-" + month;
		}
	}
}
分享到:
评论

相关推荐

    利用操作符重载,对时间操作的应用程序

    在这个"利用操作符重载,对时间操作的应用程序"中,开发者可能创建了一个自定义的时间类(Time Class),并为其定义了与日期和时间操作相关的功能,例如比较、加法和减法。 首先,让我们理解操作符重载的工作原理。...

    操作系统时间片轮转算法

    综上所述,时间片轮转算法是操作系统中实现进程并发执行的一种重要策略,它的设计和实现对系统的整体性能和用户体验有着直接的影响。理解并掌握这种算法有助于我们更好地理解和优化操作系统的行为。

    WPF程序长时间无人操作解决方案

    在软件开发中为了安全性,特别...判断程序是否长时间无人操作,有两个依据,第一个是鼠标长时间不动,第二个是鼠标焦点长时间不在此程序中(即用户长时间在操作其他的程序)。本例综合这两种情况给出一个较好的解决方案

    操作系统的时间片段轮转法

    时间片段轮转法(也称为时间片轮转法)是一种常见的调度策略,尤其适用于分时操作系统,它允许多个用户同时与系统交互。 时间片段轮转法的基本原理是将CPU的执行时间划分为固定长度的时间片,每个时间片通常在几...

    java操作时间java操作时间

    JAVA 时间 操作 时间JAVA 时间 操作 时间JAVA 时间 操作 时间JAVA 时间 操作 时间JAVA 时间 操作 时间JAVA 时间 操作 时间JAVA 时间 操作 时间JAVA 时间 操作 时间

    操作系统实验报告 时间片轮转算法+源代码

    总的来说,这个实验通过实践加深了学生对操作系统核心概念的理解,特别是进程调度和时间片轮转算法。通过编写和调试这样的程序,学生能够更好地掌握操作系统如何管理并发执行的进程,以及如何通过时间片轮转确保公平...

    操作系统实验报告-进程管理实验-时间片轮转调度算法模拟

    时间片轮转调度算法是一种用于多任务环境中的调度策略,它确保了系统对所有进程的公平性,避免了某个进程长时间独占处理器。 时间片轮转调度算法的基本思想是将系统中的所有就绪进程按照一定的顺序放入一个队列,...

    操作系统课程设计———模拟时间片轮转算法

    自己做的操作系统课程设计———模拟时间片轮转算法,通过了老师的验收,绝对可以用!附带使用说明书 自己做的操作系统课程设计———模拟时间片轮转算法,通过了老师的验收,绝对可以用!附带使用说明书 自己做的...

    易语言时间操作解析源码.rar

    通过分析和学习这些源码,你可以了解到易语言中的时间操作函数用法,加深对时间处理的理解,并能将其应用到自己的项目中。 总的来说,易语言的时间操作虽然与其它编程语言有相似之处,但其独特的中文语法和函数命名...

    易语言源码时间操作.7z

    在编程中,时间操作是一个常见的需求,无论是记录程序运行时间、设置定时任务还是处理日期和时间相关的数据,都需要对时间有深入的理解。易语言提供了丰富的内建函数和模块来支持时间操作,这些函数通常包括获取当前...

    java时间操作工具类 DateUtils

    java中常用的时间操作;如日期,时间戳,日历,字符串相互转化;时间差等常用日期功能。

    操作系统的时间片轮转法

    使用最常用的页面置换算法之一,时间片轮转法

    Android APP一段时间无操作显示屏保Demo

    android app在规定时间内用户没有操作跳出屏保,屏保activity可以展示广告。 博客介绍文章地址:http://blog.csdn.net/u010072711/article/details/50096181

    时间片轮转算法实验报告

    在本实验中,学生被要求实现一个模拟的时间片轮转调度算法,通过编写C++代码来加深对操作系统中进程控制块(PCB,Process Control Block)、进程队列以及时间片轮转算法的理解。 首先,实验内容涉及到设计PCB结构。...

    时间日期有用的操作时间日期有用的操作

    时间日期有用的操作时间日期有用的操作时间日期有用的操作时间日期有用的操作时间日期有用的操作时间日期有用的操作时间日期有用的操作

    操作系统之进程调度算法模拟(时间片轮转算法)

    同时,应判断该进程的要求运行时间与已运行时间,若该进程要求运行时间≠已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应把它的状态修改为...

    java操作文件,得到文件名,大小,时间,及修改时间

    java操作文件,得到文件名,大小,时间,及修改时间java操作文件,得到文件名,大小,时间,及修改时间java操作文件,得到文件名,大小,时间,及修改时间

    进程调度 时间片轮转法 操作系统实验

    5. **实验报告**:分析实验结果,讨论时间片大小对系统性能的影响,比如周转时间、等待时间和响应时间等。通过改变时间片长度,你可以探索最优调度策略。 6. **演示PPT**:准备演示材料,展示实验过程和结果,这有...

    操作系统大作业进程调度

    操作系统大作业通常涉及对进程调度的理解与实现,这是一个核心的计算机科学概念,特别是在操作系统领域。进程调度是操作系统内核的一项关键功能,它负责决定哪些进程应该在什么时候获得CPU执行权。在这个C语言版的...

    STM32使用time.h库函数操作时间日期

    在STM32F10x_StdPeriph_Lib_V3.5.0库中,虽然没有直接包含`time.h`库,但你可以将`time.h`库引入到项目中,并结合STM32的HAL或LL库来操作RTC,从而实现对时间日期的管理。需要注意的是,在STM32上使用`time.h`库时,...

Global site tag (gtag.js) - Google Analytics