`
wesker0918
  • 浏览: 42663 次
  • 性别: Icon_minigender_1
  • 来自: 山东->北京
社区版块
存档分类
最新评论

日期操作函数

阅读更多
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.apache.log4j.Logger;

public class DateDeal {
	private static final Logger logger = Logger.getLogger("ejb");
	protected static DateFormat formatter1 = new SimpleDateFormat("yyyyMMddHHmmss");
	protected static DateFormat formatter2 = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
	protected static DateFormat formatter3 = new SimpleDateFormat("yyyy年MM月dd日");
	protected static DateFormat formatter4 = new SimpleDateFormat("yyyyMMdd");

	public DateDeal() {}

	/**
	* 计算日期相隔的天数(按照每月30天计算)
	* @param startDate 开始日期
	* @param endDate   结束日期
	* @return  int 天数
	*/
	public static int getDays(String startDate, String endDate) {
		int date = 0;
		int sYear = Integer.parseInt(startDate.substring(0, 4));
		int sMonth = Integer.parseInt(startDate.substring(4, 6));
		int sDate = Integer.parseInt(startDate.substring(6, 8));
		int eYear = Integer.parseInt(endDate.substring(0, 4));
		int eMonth = Integer.parseInt(endDate.substring(4, 6));
		int eDate = Integer.parseInt(endDate.substring(6, 8));

		if ( (sMonth == eMonth) && (sYear == eYear)) {
			date = eDate - sDate;
		}else {
      		if (sDate == 31) {
        		sDate = 30;
      		}
      		
      		if (eDate == 31) {
        		eDate = 30;
      		}
      		
      		if (sMonth == 2 && sDate >= 28) {
        		sDate = 30;
      		}
      		
      		if (eMonth == 2 && eDate >= 28) {
        		eDate = 30;
      		}
      		date = (eYear - sYear) * 360 + (eMonth - sMonth) * 30 + (eDate - sDate);
    	}
    	return date;
  }

	/**
	* 计算日期相隔的天数(实际)
	* @param startDate 开始日期
	* @param endDate   结束日期
	* @return  int 天数
	*/
  	public static long getRealDays(String startDate, String endDate) {
    	Date sDate = null;
    	Date eDate = null;
    	try {
	      	sDate = formatter4.parse(startDate);
    	  	eDate = formatter4.parse(endDate);
    	}catch (ParseException e) {
      		e.printStackTrace();
    	}
    	long beginTime = sDate.getTime();
    	long endTime = eDate.getTime();
    	long betweenDays = (long) ( (endTime - beginTime) / (1000 * 60 * 60 * 24) + 0.5);
    	return betweenDays;
  	}

	/**
	* 字符串转化成日期-(yyyyMMddHHmmss)
	* @param dateString
	* @return
	* @throws ParseException
	*/
	public static Date stringToDate(String dateString) throws ParseException {
    	return formatter1.parse(dateString);
  	}

	/**
	* 日期转化成字符串-(yyyyMMddHHmmss)
	* @param date
	* @return
	* @throws ParseException
	*/
	public static String dateToString(Date date) throws ParseException {
    	return formatter1.format(date);
  	}

	/**
	* 日期转换成中文字符串(yyyy年MM月dd日)
	* @param date
	* @return
	* @throws ParseException
	*/
  	public static String dateToShortChinese(Date date) throws ParseException {
    	return formatter3.format(date);
  	}

	/**
	* 日期字符串转换成中文("yyyy年MM月dd日HH:mm:ss")
	* @param dataString
	* @return
	* @throws ParseException
	*/
	public static String dateStringToChinese(String dataString) throws ParseException {
    	return formatter2.format(stringToDate(dataString));
  	}

	/**
	* 日期字符串转换成中文("yyyy年MM月dd日")
	* @param dataString
	* @return
	* @throws ParseException
	*/
  	public static String dateStringToShortChinese(String dataString) throws ParseException {
    	return formatter3.format(stringToDate(dataString));
  	}

	public static String trans() {
		String dtmp = null;
		String mtmp = null;
	
		Calendar calendarSys = new GregorianCalendar();
		//取当前时间
		Date d = new Date(System.currentTimeMillis());
		calendarSys.setTime(d);
		//转换后,取年,月,日
		Integer year = new Integer(calendarSys.get(Calendar.YEAR));
		Integer month = new Integer(calendarSys.get(Calendar.MONTH) + 1);
		Integer date = new Integer(calendarSys.get(Calendar.DATE));
		
		if (date.intValue() < 10) {
			dtmp = "0" + date.toString();
		}else {
			dtmp = date.toString();
		}
	
		if (month.intValue() < 10) {
			mtmp = "0" + month.toString();
		}else {
			mtmp = month.toString();
		}
		
		//转化为字符串
		String ds = new String(year.toString() + mtmp + dtmp);
		return ds;
	}

	/* *
	得到当前的时间:时 分 秒
	*/
	public static String transHMS() {
		String dtmp = null;
		String mtmp = null;
		String stmp = null;
	
		Calendar calendarSys = new GregorianCalendar();
		//取当前时间
		Date d = new Date(System.currentTimeMillis());
		calendarSys.setTime(d);
		//转换后,取年,月,日
		Integer hour = new Integer(calendarSys.get(Calendar.HOUR_OF_DAY));
		Integer minute = new Integer(calendarSys.get(Calendar.MINUTE));
		Integer second = new Integer(calendarSys.get(Calendar.SECOND));
		if(hour.intValue()<10){
			dtmp="0"+hour.toString();
		}else{
			dtmp=hour.toString();
		}
	
		if(minute.intValue()<10){
			mtmp="0"+minute.toString();
		}else{
			mtmp=minute.toString();
		}
	
		if(second.intValue()<10){
			stmp="0"+second.toString();
		}else{
			stmp=second.toString();
		}
	
		//转化为字符串
		String ds = new String(dtmp+mtmp+ stmp);
		logger.debug("当前时间:<<<" + ds + ">>>");
		return ds;
	}


	 /*
	 *依据日期(20050808)获得该日期是本月的第几周
	 */
	public static Integer weekOfMonth(String txdate) throws ParseException {
		Date date=null;
		Integer weekOfMonth=null;
		Calendar calendarSys=new GregorianCalendar();
		calendarSys.setFirstDayOfWeek(Calendar.SUNDAY);
	
		//转换日期
		date=formatter4.parse(txdate);
		calendarSys.setTime(date);
	
		weekOfMonth=new Integer(calendarSys.get(Calendar.WEEK_OF_MONTH));

		return weekOfMonth;
	}

	/**
	*依据年月(200508)和本月第几(2)周获得该周在本月的起始日期(20050807-20050813)
	*/
	public static String startEndDate(String yearMonth, Integer weekOfMonth) throws ParseException {
		String firstDateOfMonth=null;
		String startdate=null;
		String enddate=null;
		String startEndDate=null;
		Date date01=null;
	
		Calendar calendarSys=new GregorianCalendar();
		calendarSys.setFirstDayOfWeek(Calendar.SUNDAY);
		//转换日期
		String txdate01=yearMonth+"01"; //某年月1日(20050801)
		date01=formatter4.parse(txdate01);
		calendarSys.setTime(date01);
	
		//依据某年月1日(20050801)获得是星期几(星期1)
		Integer dayOfWeek=new Integer(calendarSys.get(Calendar.DAY_OF_WEEK)-1);
		logger.debug("dayOfWeek:"+dayOfWeek) ;
	
		//获得本月的第一周的起始日期
		calendarSys.add(Calendar.DATE,-dayOfWeek.intValue());
		logger.debug("获得本月的第一周的起始日期:"+formatter4.format(calendarSys.getTime()));
	
		//获得起始日
		calendarSys.add(Calendar.DATE,(weekOfMonth.intValue()-1)*7);
		startdate=formatter4.format(calendarSys.getTime()) ;
		logger.debug("获得起始日:"+startdate);
	
		//获得终止日
		calendarSys.add(Calendar.DATE,6);
		enddate=formatter4.format(calendarSys.getTime());
		logger.debug("获得终止日:"+enddate);
		
		startEndDate=startdate+"-"+enddate;
		return startEndDate;
	}

	/*
	*依据年月日(20050808)加上x年 或 x月 或x日,返回加上x年 或 x月 或x日 后的日期(20050907)
	*param txdate String 交易日期
	*param type String 类型 1-年,2-月,3-日
	*param yearMonthDay Integer x年 或 x月 或x日
	*/
	public static String add(String txdate, String type, Integer yearMonthDay) throws ParseException {
		String resultDate=null;
		
		Calendar calendarSys=new GregorianCalendar();
		calendarSys.setFirstDayOfWeek(Calendar.SUNDAY);
		
		//转换日期
		Date date=formatter4.parse(txdate);
		calendarSys.setTime(date);
		
		//获得起始日
		if(type.trim().equals("1")){
			calendarSys.add(Calendar.YEAR,yearMonthDay.intValue());
		}else if(type.trim().equals("2")){
			calendarSys.add(Calendar.MONTH,yearMonthDay.intValue());
		}else{
			calendarSys.add(Calendar.DATE,yearMonthDay.intValue());
		}
	
		resultDate=formatter4.format(calendarSys.getTime()) ;
		logger.debug("日期:"+resultDate);
	
		return resultDate;
	}

	/**
	* 取得传入的日期的前一天的日期
	* @param curDay String
	* @return String
	*/
	public static String getYDay(String txDate) throws Exception{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		long timeT = sdf.parse(txDate).getTime();
		return sdf.format(new Date(timeT - 24 * 60 * 60 * 1000));
	}
}

 

分享到:
评论

相关推荐

    Java获取各种日期的函数(方法).docx

    Java日期操作函数详解 Java语言中日期操作函数是非常重要的一部分,日期操作函数可以帮助开发者快速获取和处理日期相关的信息。本文将对Java日期操作函数进行详细的介绍和分析。 1. 日期操作函数的基本概念 在...

    C# 常用日期时间函数

    在C#编程中,日期和时间操作是常见的需求,用于处理和展示各种日期时间相关的数据。DateTime类是C#中处理日期和时间的核心类,它提供了丰富的功能来获取、设置和格式化日期时间。以下是对C#中常用日期时间函数的详细...

    mysql 日期函数相关操作

    这些函数用于对日期进行加减操作。自MySQL 3.23版本起,推荐使用`DATE_ADD()`和`DATE_SUB()`。 示例: ```sql SELECT DATE_ADD('2021-01-01', INTERVAL 1 DAY); ``` 返回值为`'2021-01-02'`。 以上只是MySQL日期...

    oracle自定义日期函数

    DATEADD 函数的限制是它只能添加指定的时间间隔到日期中,不能用于其他类型的日期处理操作。此外,DATEADD 函数还需要根据不同的 datepart 类型来执行不同的添加时间间隔的操作,这可能会增加函数的复杂度。 结论 -...

    日期函数_vb日期函数_

    这些函数允许程序员进行日期的计算、格式化以及与日期相关的各种操作。以下是一些关键的VB日期函数及其详细说明: 1. **Date()**:这个函数返回当前系统的日期,格式为“年/月/日”。例如,如果你在2023年3月15日...

    Gbase 8s内置函数之日期函数

    Gbase 8s内置函数之日期函数 Gbase 8s是一款功能强大且高性能的关系数据库...Gbase 8s内置函数中的日期函数提供了多种方式来处理和操作日期和时间数据,开发者可以根据需要选择合适的函数来实现数据处理和分析的需求。

    sap abap日期类函数参考

    在 SAP ABAP 开发中,处理...无论是标准函数还是自定义函数,它们都提供了强大而灵活的工具,帮助程序员有效地处理日期相关的操作。通过结合使用这些函数,可以确保日期数据正确地显示、存储和处理,满足各种业务需求。

    mysql 日期操作 增减天数、时间转换、时间戳.docx

    "MySQL 日期操作详解" MySQL 日期操作是一种常用的数据库操作,用于处理日期和...MySQL 日期操作函数可以满足各种日期和时间相关的需求,包括获取当前日期和时间、计算日期和时间之间的差异、转换日期和时间格式等。

    mssql日期函数总结

    mssql 日期函数总结 MS SQL Server 提供了丰富的日期函数,开发中经常会用到。下面总结了常用的日期函数: 1. 获取当前时间 `GETDATE()` 函数用于获取...这些日期函数可以帮助开发者更方便地处理日期相关的操作。

    delphi、 sql 日期时间函数

    MSSQL提供了多种日期转换和操作函数: 1. `DATEADD()`: 此函数用于增加或减少日期的指定部分,如天、月、年等。例如,`DATEADD(day, 5, @myDate)`将`@myDate`增加5天。 2. `DATEDIFF()`: 计算两个日期之间的差值,...

    sql内置函数

    日期操作函数 - **`DAY()`**:此函数返回日期表达式的日部分。 - **示例**: ```sql SELECT DAY(GETDATE()); -- 输出结果类似 6 ``` - **`MONTH()`**:此函数返回日期表达式的月部分。 - **示例**: ```sql...

    MySQL日期时间函数大全

    在 MySQL 中,日期时间函数是非常重要的一部分,它们可以帮助我们对日期和时间进行各种操作。下面我们将对 MySQL 中的日期时间函数进行详细的讲解。 DAYOFWEEK(date) `DAYOFWEEK` 函数返回日期 `date` 是星期几,...

    一个很全的php函数库文档 txt

    日期操作函数 #### 2.1 `DateAdd()`函数 此函数用于在指定的日期上增加或减少指定的时间间隔。参数`$int`表示要添加的时间间隔值,`$unit`表示时间单位,默认为天(d)。此函数首先将输入的日期字符串解析为数组,...

    java日期类函数方法整理

    根据给定的文件信息,...以上就是对Java日期类函数方法的整理和解释,涵盖了基本的日期操作,包括日期的格式化、解析、转换以及年份和月份的获取等。掌握这些函数和方法,能够帮助开发者更高效地处理日期相关的任务。

    js操作日期函数

    上个月的最后一天;下个月的第一天;获取月份的天数 ;获取月份中的第一天是所在星期的第几天;解析字符串成日期格式对象;格式化日期对象为字符串;计算两个日期相差的天数;

    Clickhouse 时间日期函数

    ClickHouse是一个开源的列式数据库管理系统,它提供了丰富的时间日期函数来处理和操作时间和日期数据。以下是ClickHouse中常用的时间日期函数的简介: 1. toDate(date_expression):将日期表达式转换为日期类型。...

    PowerBuilder常用日期时间函数

    ### PowerBuilder 常用日期时间函数详解 ...通过上述介绍,我们可以看到 PowerBuilder 提供了非常丰富的日期时间处理函数,这些函数不仅简化了日期时间的操作,还使得开发者能够更灵活地进行时间相关的编程任务。

    SQL语句范例-有关日期的函数

    应用:类似于计算上个月第一天的功能,但在实际操作中更常用于数据统计的截止日期设定。 ### 9. 计算星期名称 函数原型:`day_name(date)` 实现方式:通过复杂的日期计算,包括年份、月份、日期以及从年初至今的...

    Oracle日期函数练习

    Oracle 日期函数练习 Oracle 日期函数是 Oracle 数据库中的一组功能强大且广泛使用的...Oracle 日期函数提供了丰富的日期操作和计算功能,通过这些函数,可以轻松地对日期进行各种操作和计算,以满足不同的业务需求。

    mysql时间日期函数

    这些函数提供了丰富的功能,可以帮助用户在查询、更新或插入数据时精确地操作日期和时间。下面将详细介绍几个核心的时间日期函数及其应用场景。 ### DAYOFWEEK(date) 此函数返回给定日期是一周中的第几天(1表示...

Global site tag (gtag.js) - Google Analytics