java时间类Date、Calendar及用法

  对于时间类,这篇主要说明各类现实状况下如何取值,怎么定向取值,获得本身想要的时间参数。在java中时间类主要有DateCalendar,暂时只介绍 java.util.*下的时间类,对于java.sql.*下的先不作介绍,之后在另一篇进行补充,这篇主要内容有如下几个。java

         一、如何获取当前时间参数sql

         二、如何过去某一个月第一天和最后一天 测试

         三、如何获取当日日期,当月月份,当年年份spa

         四、如何加减日期code

         五、获取两个时间之间的时间差orm

  首先,咱们须要了解API下对其的介绍,让在使用的时候明白为何这么写?而不是简单的复制粘贴应付差事。对象

  对于Date,不少方法已通过时迁移到了Calendar类上,可是这是最初的时间类,构造方法主要介绍两种即blog

    Date date= new Date();//分配对象并初始话get

    Date date= new Date(long date)//分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日00:00:00 GMT)以来的指定毫秒数。
博客

  能够看得出来,Date是以历元为标准的,简单的验证下你的猜测。new Date().getYear() 的值是  117 然而今年是 2017 。

  对于Calendar,与Date不一样的是,他对Date的时间历元进行偏移,要是看括号里的有点晕可不看。API(Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法,并为操做日历字段(例如得到下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量)。

  Calendar不得不说的就是类方法 getInstance,CalendargetInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:这个方法你必需要知道,否则你玩什么Calendar呢是否是? 

              Calendar rightNow = Calendar.getInstance();

  好了下面咱们介绍各类现实须要处理的,也确定是你进入博客要找的。


     在介绍如下的内容前,咱们先说明下也不得不说的一个类SimpleDateFormat,其属于java.text.*下,SimpleDateFormat 是一个以语言环境有关的方式来格式化和解析日期的具体类,它容许进行格式化(日期-->文本)、解析(文本-->日期)和规范化。下面不少方法都出现了这个类的应运,简单说一下扫除心中的疑惑,抽空能够看一下API。

    

    一、如何过去当钱时间参数。yyyy-MM-dd hh:mm:ss 、yyyy-MM-dd、yyyy-MM-dd hh:mm 、yyyyMMdd等等各类状况,这个大家须要什么本身改代码。

1         public static String getCurrentTime() { 2           Date NowDate = new Date(); 3           SimpleDateFormat formatter =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 4           CurrentTime = formatter.format(NowDate); 5           return CurrentTime; 6    }

   

    二、何获取某一个月的第一天和最后一天。

    第一天确定容易,最后一天其实也很容易,主要用到了Calendar和SimpleDateFormat两个类,须要注意的是月份按0---11总共十二个月,不是从1开始的,可是一个月几号第几天倒是从1开始的,如下是对两个方法进行的封装。

 1     public static String getLastDayOfMonth(int year, int month) {  2           Calendar cal = Calendar.getInstance();  3    cal.set(Calendar.YEAR, year);  4    cal.set(Calendar.MONTH, month);  5    cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));  6          return  new   SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());  7    }  8       public static String getFirstDayOfMonth(int year, int month) {  9           Calendar cal = Calendar.getInstance(); 10    cal.set(Calendar.YEAR, year); 11     cal.set(Calendar.MONTH, month); 12    cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE)); 13          return   new   SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime()); 14       }

    

    

    三、如何获取当月月份,当年年份,当前日期?较为简单不作测试。在这个方法上你能够测试下当传yyyy-MM-dd等等各类参数,变通应用获取时间参,好比获取2017-0九、20170九、2017-09-2二、20170922等等各类数据,有兴趣的话本身进行测试下验证下本身的想法。

 1       /**
 2       * @param type类型 
 3       * dd 日 MM 月 yyyy 年 按须要进行传参
 4       * @return
 5       */
 6       public static String getCurrentDay(String type) {
 7         java.util.Date NowDate = new java.util.Date();
 8         SimpleDateFormat formatter = new SimpleDateFormat(type);
 9         return formatter.format(NowDate);
10       }

    四、如何加减日期?Calendar类中提供了add方法,按须要进行操做想要的结果哦!

    这里简单的介绍下add方法,即add(f, delta)将 delta 添加到 f 字段中,主要有两个规则:

Add 规则 1。调用后 f 字段的值减去调用前 f 字段的值等于 delta,以字段 f 中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。

Add 规则 2。若是指望某一个更小的字段是不变的,但让它等于之前的值是不可能的,由于在字段 f 发生更改以后,或者在出现其余约束以后,好比时区偏移量发生更改,它的最大值和最小值也在发生更改,而后它的值被调整为尽可能接近于所指望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不指望是不变字段的更小字段,无需进行任何调整。日历系统会肯定指望不变的那些字段。

  废话太多直接弄代码!给个标记,如今的时间是2017-09-21,须要注意的是 向后推一天是 +1 向前是 -1,下面代码的测试结果为2017-09-22   

1        Calendar c = Calendar.getInstance();
2           c.add(Calendar.DAY_OF_MONTH, +1);
3           Date d = c.getTime();
4           System.out.println(new   SimpleDateFormat( "yyyy-MM-dd ").format(d)); 

    五、获取两个时间之间的时间差

    有时候须要获取两个时间的时间差,下面的方法主要用到了SimpleDateFormatMath两个类,直接放代码吧!

 1 /**
 2      * 获取时间差
 3      * @param time1 time2 须要计算的时间
 4      * @return
 5      */
 6     public static String getTimeDeffer(String time1,String time2)
 7     {
 8         String result = "";
 9         if(StringUtils.isNotBlank(time1)&&StringUtils.isNotBlank(time2)){
10             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
11             try {
12                 long dt1 = sdf.parse( time1 ).getTime();
13                 long dt2 = sdf.parse( time2 ).getTime();
14                 long dc = Math.abs(dt2-dt1);
16                 long seconds = dc/1000;   
17                 long date = seconds/(24*60*60);     //相差的天数   
18                 long hour = (seconds-date*24*60*60)/(60*60);//相差的小时数   
19                 long minut = (seconds-date*24*60*60-hour*60*60)/(60);//相差的分钟数
20                 long second = (seconds-date*24*60*60-hour*60*60-minut*60);//相差的秒数   
21                 return (date==0?"":(date+"天"))+(hour==0?"":(hour+"小时"))+(minut==0?"":(minut+"分"))+(second==0?"":(second+"秒"));
22             } catch (ParseException e) {
23                 e.printStackTrace();
24             }
25         }
26         return result;        
27     }

   这里咱们简单的测试下,就不放图了,简单的说一下,例如:

  System.out.println(getTimeDeffer("2015-10-21 10:48:22","2015-10-27 22:48:23"));

  结果是:6天12小时1秒


 

  休息下班,明天继续

  但愿你们能积极发表本身的见解和建议,支持下哦

相关文章
相关标签/搜索