`

时间公共类

阅读更多

     自己用到过的时间方法

    

package com.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

/**
 * 操作时间、日期的工具类
 */
public class DateUtil {
	public static SimpleDateFormat daydf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	public static SimpleDateFormat ym = new SimpleDateFormat("yyyy-MM");
	
	private DateUtil(){}
	
    /**
     * 格式化字符串为日期
     * @param day 字符串格式为yyyy-MM-dd
     * @return 日期 Date对象
     */
    public static java.util.Date formatDayTime(String day){
        try {
            return sdf.parse(day);
        } catch (ParseException ex) {
            ex.printStackTrace();
            return new java.util.Date();
        }
    }
    
    public static Date formatToDate(String day){
        try {
            return daydf.parse(day);
        } catch (ParseException ex) {
            ex.printStackTrace();
            return new java.util.Date();
        }
    }


    /**
     * 格式字符串为某年某月的第一天。
     * @param yearmonth 格式为2008-10
     * @return 某年某月的第一天
     */
    public static java.util.Date formatMonthTime(String yearmonth){
        try {
            return sdf.parse(yearmonth + "-01");
        } catch (ParseException ex) {
            ex.printStackTrace();
            return new java.util.Date();
        }
    }
    
	
	/**
	 * 
	 * @return
	 * @throws ParseException 
	 */
	public static String lastDayOfMonth(String yearMonth) throws ParseException{
		Calendar calendar=Calendar.getInstance();   
        Calendar cpcalendar=(Calendar)calendar.clone();  
        cpcalendar.setTime(ym.parse(yearMonth));
        cpcalendar.add(Calendar.MONTH, 1);   
        cpcalendar.add(Calendar.DATE, -1);   
        String date = sdf.format(cpcalendar.getTime());   
        return date;
	}
	
    
    /**
     * 获取当前月有多少天
     * @return
     */
    public static int getDayOfMonth(){
    	Calendar c = Calendar.getInstance(Locale.CHINA);
    	int countDay = c.getActualMaximum(Calendar.DATE);
    	return countDay;
    }
    
    /**
     *返回自1970年1月1日00:00:00GMT以来此日期对象表示的毫秒数
     *@param str 格式为yyyy-MM-dd
     */
    public static long parseDayByYYYYMMDD(String str){
        try {
            return sdf.parse(str).getTime();
        } catch (Exception ex) {
            return 0L;
        }
    }
    /**
     *返回自1970年1月1日00:00:00GMT以来此时间对象表示的秒数
     *@param str 格式为yyyy-MM-dd HH:mm:ss
     */
    public static int parseTimeByYYYYMMDDHHMMSS(String str){
        if(str == null || str.length() != 19) return 0;
        try {
            return (int)(daydf.parse(str).getTime()/1000L);
        } catch (Exception ex) {
            return 0;
        }
    }
    /**
     * 得到 yyyy-MM-dd 格式的指定日期的前一天
     */ 
    public static String foreDay(String day){
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(parseDayByYYYYMMDD(day));
        cal.add(Calendar.DAY_OF_MONTH, -1);
        return sdf.format(cal.getTime());
    }
    /**
     * 根据时间值构造日期
     */
    public static String parseDay(int time){
        return sdf.format(new java.util.Date(time*1000L));
    }
    /**
     * 显示时间
     * @param millseconds 毫秒数
     * @return 时间显示
     */
    public static String displayTime(long millseconds) {
        if(millseconds < 1000) return millseconds+" ms";
        int seconds = (int)(millseconds/1000);
        if(seconds < 60) return seconds+" s";
        if(seconds < 60*60) return seconds/60+"m"+seconds%60+"s";
        int m = seconds -(seconds/3600)*3600;
        if(seconds < 24*60*60) return seconds/3600+"h"+m/60+"m"+m%60+"s";
        return millseconds+" ms";
    }
    

    /**
     * 转换成yyyy-MM-dd格式的日期字符串
     * @param d Date对象
     */
    public static String formatDay(java.util.Date d){
        return sdf.format(d);
    }
    /**
     * 转换成yyyy-MM-dd格式的日期字符串
     * @param d Calendar对象
     */
    public static String formatDay(java.util.Calendar d){
        return sdf.format(d.getTime());
    }
    /**
     * 转换成yyyy-MM-dd HH:mm:ss格式的时间
     * @param time 毫秒数
     */
    public static String formatyyyyMMddHHmmss(long time){
        return daydf.format(new java.util.Date(time));
    }
    
    /**
     * 转换成yyyy-MM-dd HH:mm:ss格式的时间
     * @param time 毫秒数
     */
    public static String formatyyyyMMdd(long time){
        return sdf.format(new java.util.Date(time));
    }
    
    /**
     * 将时间转换成yyyy-MM-dd HH:mm:ss的格式字符串。
     * @param time 时间对象
     * @return 格式化后的字符串,当输入为null时输出为""
     */
    public static String formatyyyyMMddHHmmss(Date time){
        if(time==null){
            return "";
        }
        try{
            return daydf.format(time);
        }
        catch(Exception ex){
            return "";
        }
    }

    /**
     * 当前日期
     * @return yyyy-MM-dd格式的当前日期
     */
    public static String today() {
        return sdf.format(new java.util.Date());
    }
	
    /**
     * 当前日期的前一天
     * @return 当前日期的前一天
     */
    public static String yesterday(){
        java.util.Calendar cal =java.util.Calendar.getInstance();
        cal.add(java.util.Calendar.DAY_OF_MONTH, -1);
        return sdf.format(cal.getTime());
    }
    

    /**
     * 当前日期的下一天
     * @return 当前日期的下一天
     */
    public static String tomorrow(){
        java.util.Calendar cal =java.util.Calendar.getInstance();
        cal.add(java.util.Calendar.DAY_OF_MONTH, 1);
        return sdf.format(cal.getTime());
    }
        
    /**
     * 返回本月1号
     * @return 返回本月1号
     */
    public static String currmonth1day(){
        java.util.Calendar cal =java.util.Calendar.getInstance();
        cal.set(java.util.Calendar.DAY_OF_MONTH, 1);
        return sdf.format(cal.getTime());
    }
    
    /**
	 * 返回本月最后一天
	 */
	public static String lastDayOfMonth(){
		Calendar calendar=Calendar.getInstance();   
        Calendar cpcalendar=(Calendar)calendar.clone();   
        cpcalendar.set(Calendar.DAY_OF_MONTH,1); 
        cpcalendar.add(Calendar.MONTH, 1);   
        cpcalendar.add(Calendar.DATE, -1);   
        String date = sdf.format( new Date(cpcalendar.getTimeInMillis()));   
        return date;
	}
	
	
	/**
	 * 给指定时间加上一个数值
	 * @param time1 要加上一数值的时间,为null即为当前时间,格式为yyyy-MM-dd HH:mm:ss
	 * @param addpart 要加的部分:年月日时分秒分别为:YMDHFS
	 * @param num 要加的数值
	 * @return 新时间,格式为yyyy-MM-dd HH:mm:ss
	 */
	public static String addTime(String time1,String addpart,int num){
		try{
			String now = daydf.format(new Date());
			time1 = (time1 == null) ? now : time1;
			if (time1.length() < 19){
				time1 += " 00:00:00";
			}
			GregorianCalendar cal = new GregorianCalendar();
			cal.setTime(daydf.parse(time1));
			if (addpart.equalsIgnoreCase("Y")){
				cal.add(Calendar.YEAR,num);
			}else if (addpart.equalsIgnoreCase("M")){
				cal.add(Calendar.MONTH,num);
			}else if (addpart.equalsIgnoreCase("D")){
				cal.add(Calendar.DATE,num);
			}else if (addpart.equalsIgnoreCase("H")){
				cal.add(Calendar.HOUR,num);
			}else if (addpart.equalsIgnoreCase("F")){
				cal.add(Calendar.MINUTE,num);
			}else if (addpart.equalsIgnoreCase("S")){
				cal.add(Calendar.SECOND,num);
			}
			return daydf.format(cal.getTime());
		}
		catch(Exception e){
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 给指定日期加上一个数值
	 * @param date1 要加上一数值的日期,为null即为当前日期,格式为yyyy-MM-dd
	 * @param addpart 要加的部分:年月日分别为:YMD
	 * @param num 要加的数值
	 * @return 新日期,格式为yyyy-MM-dd
	 */
	public static String addDate(String date1,String addpart,int num){
		return addTime(date1,addpart,num).substring(0,10);
	}
	
	
    /**
     * 当前日期
     * @return yyyy-MM-dd HH:mm:ss格式的当前日期
     */
    public static String now() {
        return daydf.format(new java.util.Date());
    }
    /**
	 * 返回当前时间
	 */
	public static String timeofnow(){
		Calendar curcal = Calendar.getInstance();
		return daydf.format(curcal.getTime());
	}

    /**
     * 得到距离当前天几天的日期表达,格式为1985-12-20。
     * @param step 天数。例如-10表示十天前
     * @return
     */
    public static String dateofSepcial(int step) {
        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.add(java.util.Calendar.DAY_OF_MONTH, step);
        return sdf.format(cal.getTime());
    }
    
    /**
     * UNIX时间x
     * @return
     */
    public static  String getCurrUnixtimestamp(){
		String ret = "";
		try {
			Date date = daydf.parse("1970-01-01 00:00:00");
			long l = (new Date().getTime() - date.getTime())/1000;
			ret = String.valueOf(l);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ret;
	}
    
    /**
     * 比较时间大小,精确到时分秒
     */
    public static boolean compareDateYYYYMMDDHHmmss(String date1, String date2) {
        try {
            Date dt1 = daydf.parse(date1);
            Date dt2 = daydf.parse(date2);
            if (dt1.getTime() >= dt2.getTime()) {
            	return true;
            } else if (dt1.getTime() < dt2.getTime()) {
            	return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    
    
    /**
     * 比较时间大小,精确到天
     */
    public static boolean compareDateYYYYMMDD(String date1, String date2) {
        try {
            Date dt1 = sdf.parse(date1);
            Date dt2 = sdf.parse(date2);
            if (dt1.getTime() >= dt2.getTime()) {
            	return true;
            } else if (dt1.getTime() < dt2.getTime()) {
            	return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    
    
    /**
     * 计算两日期的差的天数
     * @param smdate 开始日期
     * @param bdate 结束日期
     */
    public static int daysBetween(String smdate,String bdate) {  
    	int num = 0;
    	try {
    		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
	        Calendar cal = Calendar.getInstance();    
	        cal.setTime(sdf.parse(smdate));    
	        long time1 = cal.getTimeInMillis();                 
	        cal.setTime(sdf.parse(bdate));    
	        long time2 = cal.getTimeInMillis();         
	        long between_days=(time2-time1)/(1000*3600*24);  
	        num = Integer.parseInt(String.valueOf(between_days)); 
		} catch (Exception e) {
			e.printStackTrace();
		}   
    	
    	return num;
    } 
    
    
    /**
     * 获取传入时间,所在年的周数
     * @param date
     * @return
     */
    public static int getWeekOfYear(String dateStr) {
    	//简单时间格式话类
    	SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd");
    	
		try {
			Date date = simpleDateFormat.parse(dateStr);
			Calendar c = new GregorianCalendar();
	        c.setFirstDayOfWeek(Calendar.MONDAY);
	        c.setMinimalDaysInFirstWeek(7);
	        c.setTime(date);
	        return c.get(Calendar.WEEK_OF_YEAR);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return 1;
    }

    
    /**
     * 获取当前年的最大周数
     * @param year
     * @return
     */
    public static int getMaxWeekNumOfYear(int year) {
    	//简单时间格式话类
    	SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd");
    	
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

        return getWeekOfYear(simpleDateFormat.format(c.getTime()));
    }
    
    /**
     * 获取某年的第几周的开始日期
     * @param year
     * @param week
     * @return
     */
    public static String getFirstDayOfYearOrWeek(int year, int week) {
    	//简单时间格式话类
    	SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd");
    	
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DATE, 1);

        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);
        
        
        return getFirstDayOfWeek(simpleDateFormat.format(cal.getTime()));
    }
    
    /**
     * 获取当前时间所在周的开始日期
     * @param dateStr
     * @return
     */
    public static String getFirstDayOfWeek(String dateStr) {
    	//简单时间格式话类
    	SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd");
    	
		try {
			//将字符串格式话为时间
			Date date = simpleDateFormat.parse(dateStr);
		    Calendar c = new GregorianCalendar();
	        c.setFirstDayOfWeek(Calendar.MONDAY);
	        c.setTime(date);
	        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); 	//Monday
	        return simpleDateFormat.format(c.getTime());
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
    }
 
    /**
	 * 获取输入时间,相同周数、相同星期几、去年的日期
	 * @param thisDate
	 * @return
	 */
    public static String getPastWeekEqualDate(String thisDate){
  		//简单时间格式话类
  		SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd");
  		
  		Date date = new Date();
		
  		try {
			date = simpleDateFormat.parse(thisDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
  		
  		Calendar cal = Calendar.getInstance();  
        //设置时间
        cal.setTimeInMillis(date.getTime());  
        //获取当前年份
        int year = cal.get(Calendar.YEAR);
        
        //获取当前在今年的周数
        int startTimeWeek = DateUtil.getWeekOfYear(thisDate);
        //获取当前日期所在周的开始日期
        String thisWeekDate = DateUtil.getFirstDayOfYearOrWeek(year,startTimeWeek);
        //计算输入日期与所在周第一天的差值
        int insertDiffer =DateUtil.daysBetween(thisWeekDate,thisDate);
        
        //获取去年的最大周树
        int pastYearMaxWeek = DateUtil.getMaxWeekNumOfYear(year-1);
        //如果去年没有当前周,则周数减1
        if(startTimeWeek > pastYearMaxWeek){
        	startTimeWeek = startTimeWeek -1;
        }
        //获取去年的同周数的,第一天
        String paseYearWeekOneDdy = DateUtil.getFirstDayOfYearOrWeek(year-1,startTimeWeek);
        
        //得到去年相同周数的相同的日期
        String pastWeekStartDate = DateUtil.addDate(paseYearWeekOneDdy, "D", insertDiffer);
       
        return pastWeekStartDate;
	}
    
    
    /**
     * 测试
     */
  	public static void main(String[] args) throws ParseException {
  		String thisDate = "2015-07-29";
  		
  		//简单时间格式话类
  		SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd");
  		Date date = simpleDateFormat.parse(thisDate);
  		
  		Calendar cal = Calendar.getInstance();  
        //设置时间
        cal.setTimeInMillis(date.getTime());  
        
        //获取当前年份
        int year = cal.get(Calendar.YEAR);
        
        //获取当前在今年的周数
        int startTimeWeek = DateUtil.getWeekOfYear(thisDate);
        System.out.println("当前周数:" + startTimeWeek);
        
        //获取去年的最大周树
        int pastYearMaxWeek = DateUtil.getMaxWeekNumOfYear(year-1);
        System.out.println("去年最大周数:" + pastYearMaxWeek);
        
        //如果去年没有当前周,则周数减1
        if(startTimeWeek > pastYearMaxWeek){
        	startTimeWeek = startTimeWeek -1;
        }
        
        //获取当前日期所在周的开始日期
        String thisWeekDate = DateUtil.getFirstDayOfYearOrWeek(year,startTimeWeek);
        System.out.println("当前日期所在周的第一天日期:" + thisWeekDate);
        
        
        //获取去年的同周数的,第一天
        String paseYearWeekOneDdy = DateUtil.getFirstDayOfYearOrWeek(year-1,startTimeWeek);
        System.out.println("去年相同周岁的第一天日期:" + paseYearWeekOneDdy);
        
        //计算输入时间所在的周,与当前周的第一天的天数差
        int insertDiffer =DateUtil.daysBetween(thisWeekDate,thisDate);
        System.out.println("输入日期和输入日期所在周的第一天相差天数:" + insertDiffer);
        
        //得到去年相同周数的相同的日期
        String pastWeekDate = DateUtil.addDate(paseYearWeekOneDdy, "D", insertDiffer);
        System.out.println("去年相同周岁相同日期:" + pastWeekDate);
  	}
}

 

分享到:
评论

相关推荐

    C# 常用公共类

    在C#编程中,公共类(Public Class)是开发者经常使用的构建模块,它们提供了一种方式来封装数据和行为,使得代码更具可重用性和可维护性。本资源包“C# 常用公共类”集合了一些在开发过程中常用的公共类库,旨在...

    java常用公共类

    在Java编程语言中,"公共类"(public class)是开发者经常使用的一种核心概念,它在构建可重用代码和模块化系统时起着至关重要的作用。这些公共类提供了各种功能,帮助程序员处理常见的任务,提高了开发效率。下面将...

    C#连接SQL数据库公共类

    "C#连接SQL数据库公共类"是一个为了简化数据库操作而设计的通用代码段,它封装了数据库连接、查询、事务处理等常见操作,使得开发者可以更高效地进行数据库操作。 在`SQLHelper.cs`这个文件中,我们可以预期找到一...

    FTP公共操作类

    7. **异步操作**:为了提高用户体验,FTP公共操作类可能会支持异步操作,利用C#的async/await关键字,使得长时间的FTP操作不会阻塞UI线程。 8. **身份验证**:FTP支持多种身份验证方式,如基本认证(Basic)、NTLM...

    操作sqlserver数据库的公共类

    本篇将详细阐述一个用于操作SQL Server数据库的公共类的设计与使用,主要涉及如何获取数据库连接、执行常见的增删改查操作以及如何关闭结果集。 首先,一个公共类是为了实现代码的复用性,通常包含一系列通用的方法...

    c#公共类包括DBHelper和其它很多公共函数

    在C#编程中,公共类(Public Class)是面向对象编程的一个重要概念,它定义了一组相关属性和方法,可以在程序的多个部分之间共享。在这个特定的案例中,标题提到的"DBHelper"是一个常见的数据库操作类,通常用于简化...

    C#清空重置控件公共类

    ### C# 清空重置控件公共类 在C# WinForms开发中,经常会遇到需要批量清除或重置窗体上多个控件值的情况。本文将详细介绍一个实用的公共类——`ClearValue`,该类能够帮助开发者快速地对各种类型的控件进行清空或...

    php数据处理公共类.zip

    为了提高代码的复用性和维护性,开发者通常会创建一些公共类来封装这些操作。"php数据处理公共类.zip"提供的就是一个这样的工具,用于简化常见的数据处理任务。下面将详细介绍这个公共类的可能功能和使用场景。 ...

    项目构建公共类tools

    在Java开发过程中,"项目构建公共类tools"通常是指一组被多个模块或项目共享的工具类,它们封装了一些常见的、通用的功能,以提高代码的复用性和开发效率。这些工具类可能涵盖各种领域,如文件操作、日期时间处理、...

    RF公共类dll文件

    适用于RF项目的公共类dll,免去重复开发的时间成本

    C# 时间计算通类

    包含几乎全部可以用到的时间计算方法 时间差 每月星期 每月第几个星期几等等

    常用公共JAVA类,基础类

    3. **公共类**:公共类是可被其他类访问的类,其访问修饰符通常为`public`。这类类设计时考虑了与其他类的协作,提供了对外的接口供其他代码调用。 4. **类库的设计原则**:良好的类库设计应遵循单一职责原则(每个...

    C#常用公共类源码(100多个)可以直接使用.rar

    ,加密解密,压缩解压缩,各种验证帮助类,图片,图片操作类,图片验证码,处理多媒体的公共类,处理枚举类,字符串,对象转换处理,帮助文档,序列化,异步线程,弹出消息类 ,数据展示控件绑定数据类,文件操作类,日历,日志,时间戳...

    绍兴文理学院公共类设备维修申请表绍兴文理学院公共类设备维修记录表.docx

    绍兴文理学院公共类设备维修申请表和设备维修记录表的使用可以确保设备的正常运转和使用寿命的延长,减少设备的停机时间和维修成本,提高设备的使用效率和经济效益。同时,Assets and Laboratory Management Office...

    jxl技术-excel操作公共类

    这个“jxl技术-excel操作公共类”是基于JXL库的一个封装,目的是简化Excel操作,提供更方便的API来实现常见的功能。 JXL库的核心概念包括工作簿(Workbook)、工作表(Worksheet)、行(Row)和单元格(Cell)。...

    c#公共类包括DBHelper和其它很多公共函数V1.1

    【标题】"C#公共类包括DBHelper和其它很多公共函数V1.1"是一个针对C#编程语言的代码库,主要关注的是公用类和函数的实现,特别提到了DBHelper,这通常是一个用于数据库操作的辅助类。该版本1.1表明这是一个经过至少...

    公共时间计算类

    该类包含日期之间的天数、日期之间的月数、星期数以及月底日期、以及日期与月底日期的转换

    .net网站开发的公共类

    标题中的".net网站开发的公共类"指的是这些类库通常包含一系列用于处理常见任务的方法和属性,如数据库操作、文件上传、短信发送等。下面将对这些主要功能进行详细讲解。 1. **数据库操作**:DB.cs文件很可能包含了...

    C# 公共连接数据处理类

    标题 "C# 公共连接数据处理类" 暗示了这是一个关于使用C#编程语言编写的类库,主要用于处理数据库连接和其他形式的数据交互。这类库通常包含一系列方法和属性,以方便开发者在应用程序中安全、高效地访问和操作数据...

Global site tag (gtag.js) - Google Analytics