`

时间公共类

阅读更多

     自己用到过的时间方法

    

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);
  	}
}

 

分享到:
评论

相关推荐

    asp.net公共类

    很多长用的公共类,在开发中可以节省很多时间

    RF公共类dll文件

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

    C# 时间计算通类

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

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

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

    公共时间计算类

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

    aspnet公共类cs文件.rar

    枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类(RMBUtil.cs...

    公共封装类大全(各种基类)

    Jquery相关、jQuery.cookie帮助类、访问系统相关、C#基础类库(Chart图形、CSV文件转换、FTP操作类、加密/解密帮助类、FTP操作类、JS操作...时间操作类、视频转换类、条形码、文件操作类、验证码)等等还有好多就没写了

    公共方法类

    转成base64字符串 从base64字符串转成可识别字符串 将 Stream 转成 byte[] 将 byte[] 转成 Stream ...根据时间范围,数据文件类型过滤数据文件 两数相除,结果有余数则自动加1 四则运算公式校验 ...........

    公共函数,基本函数,base.js(最新版)

    公共函数,基本函数。 搜索文字的高亮,存取数据的去重封装,时间处理相关,拖动悬浮的封装,查询某个日期的未来或者曾经几天是多久,深拷贝,复制剪切板,金额上下取整,浮点数求和,当天时间转换为距离当天00:00...

    时间日期处理公用类

    针对时间日期各种格式之间转换等操作的公用类。

    java时间轮的定时器,多轮和单轮实现

    此为根据时间轮定时器的算法实现的 java时间轮的定时器,多轮和单轮实现

    时间操作公共方法DateUtils

    工具类包含String,Long,Date三种日志类型的获取和转换,不同时间单位(年/月/日/时/分/秒/毫秒)的时间差计算,给定时间获取附近整周的日期等~

    公共方法类库dll,转换文件格式,处理字符串,处理图片,处理文件等

    此类库由Fly经一年多在一些实际开发项目中运用到的公共方法,特于今日整合在一起已备使用,也希望给朋友们提供一个参考(也有待优化)。 具体类库说明如下: 1.DateDeal.cs 专门用于对日期时间的处理,如时间差、...

    C#200个基础工具类大全.zip

    处理多媒体的公共类;弹出消息类;二维码操作类;汉字转拼音;加密解密;科学计数,数学;类型转换;配置文件操作类;上传下载;时间操作类;视频帮助类;数据展示控件绑定数据类;条形码帮助类;图片操作类;文件操作类;序列化;...

    java 时间处理类

    在订购类业务中,频繁涉及时间计算问题。 两个构造函数 public Kdate(int days) public Kdate(int year, int month, int day) 三个公共接口: public Kdate delay(int length, char amount) amount为量词,用于...

    超级多的C#辅助类大全

    网上有各式各样的帮助类,公共类,但是比较零碎,经常有人再群里或者各种社交账号上问有没有这个helper,那个helper,于是萌生了收集全部helper的念头,以便日后使用。各式各样的几乎都能找到,所有功能性代码都是独立...

    simple_utils

    #自己写的一些公共代码 ##时间公共类 一些常用的时间处理

    C#实现日期格式转换的公共方法类实例

    主要介绍了C#实现日期格式转换的公共方法类,结合完整实例形式分析了C#针对各种常见日期格式的转换方法,涉及C#字符串、日期、时间相关操作技巧,需要的朋友可以参考下

    JS实现处理时间,年月日,星期的公共方法示例

    本文实例讲述了JS实现处理时间,年月日,星期的公共方法。分享给大家供大家参考,具体如下: 在项目中用到的,用js 来得到年月日,星期,当前多少个周的函数,备忘在这里,以后参考。 Date.prototype.getWeek = ...

Global site tag (gtag.js) - Google Analytics