与时间日期等等相关的一些类和基本操作

1.Date类

  在util包中

  public class Date,因此是可以通过构造函数来创建对象的

 

  a:常用的两个构造函数:

  1)Date date = new Date();

  2)long time = 12313018203180L;  Date date2 = new Date(time);

 

  b:常用函数:

  date.getTime();  //将Date对象转换成毫秒值  //1489110935579

  若直接输出Date对象的话,结果则是系统中的保存时间的格式:Fri Mar 10 09:21:31 CST 2017

  其余的很多函数都已经过时了,目前不用了.

1 //第一种是无参构造函数 new Date()
2         //获取当前的系统的Date对象
3         Date date1 = new Date();
4         //Fri Mar 10 14:29:56 CST 2017
5         System.out.println(date1);    
6         //1489127396584
7         System.out.println(date1.getTime()); 

 

1 //第二种是有参构造函数 new Date(long time)
2         //指定一个毫秒时
3         long time2 = 1489173862093L;
4         //根据指定的毫秒数获取一个Date对象
5         Date date2 = new Date(time2);
6         //Fri Mar 10 09:21:31 CST 2017
7         System.out.println(date2);        

 -----------------------------------------------------------------

 

2.DateFormat类

 DateFormat属于text包下

 public abstract class DateFormat

 因为是抽象类,不能使用new来创建对象,使用getInstance函数获取对象


 两个函数

 1)format

 用来将系统中默认的时间格式转换为标准化的格式:yyyy-MM-dd HH:mm:ss(即系统默认格式)

 String newDate = df.format(date)

 返回的是string类型

 1 //演示format函数
 2         Date date1 = new Date(712983719379L);
 3         DateFormat df = DateFormat.getDateTimeInstance();
 4         //将获取的日期格式化为标准的格式
 5         String date2 = df.format(date1);
 6         //Wed Aug 05 11:01:59 CST 1992
 7         System.out.println(date1);
 8         //1992-8-5 11:01:59
 9         System.out.println(date2);
10         System.out.println("------------");

 

-----------------------------------------------------------------------------

 

 2)parse

 将对应默认格式的format时间转换成系统中的时间

 与format是一个恰恰相反的过程

 注意:要进行异常的捕获,若输入的时间格式不正确的话,要输出提示客户;eclipse很人性化,不捕获的话,会直接报错提示

 Date newDate = df.parse(strDate);

 返回的是date对象

 1 //演示parse函数
 2         String strDate = "2017-03-10 17:51:32";
 3         try {
 4             //将标准时间转化为系统中的时间
 5             //Fri Mar 10 17:51:32 CST 2017
 6             Date newDate = df.parse(strDate);
 7             System.out.println(newDate);
 8         } catch (ParseException e) {
 9             System.out.println("您输入的日期的格式是不正确的!!");
10         }
11         
12     }

---------------------------------------------------------

 

3.SimpleDateFormat类

 public class SimpleDateFormat extends DateFormat

 是DateFormat的子类

 这是个自定义的格式化解析器,能够将系统中的时间转化为用户自定义的时间格式,或是将自定义的时间格式转化为系统时间

 注意:月份0-11 一周从周日开始

 不是抽象类了,可以使用构造方法进行创建对象

 常用的有两个构造函数:

 1)SimpleDateFormat();

 2)SimpleDateFormat(String pattern);

 常用的函数:

 1)format

 2)parse:使用parse函数的时候,同样也需要对异常进行捕获

 区别:

 与DateFormat的区别:SimpleDateFormat可以1)将Date对象转换成自定义的时间格式 2)将自定义的时间格式解析成系统中的时间形式

 以下演示下两种函数的使用:

 

1 //使用带string参数的构造函数
2         //演示format函数
3         Date date = new Date();
4         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
5         String newDate = sdf1.format(date);  //返回的是string类型的
6         //2017年03月10日 20时08分27秒
7         System.out.println(newDate);

 

------------------------------------------------------

 

 1         //演示parse函数
 2         //将自定义的strDate时间转换成系统时
 3         String strDate="2016/09/10 13时17:20秒";
 4         SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH时mm:ss秒");
 5         try {
 6             Date newDate2 = sdf2.parse(strDate);
 7             System.out.println(newDate2);
 8         } catch (ParseException e) {
 9             // TODO Auto-generated catch block
10             e.printStackTrace();
11         }

-----------------------------------------------------

 

使用SimpleDateFormat的一个小练习:

计算  "2014-08-09 09:09:09"  与  "2026年08/01 10:10:10"  相差多少个月(年)。

分析:
  直接相减肯定是不行的,因此考虑到:

    1)先将两个时间通过SimpleDateFormat解析成Date对象

    2)调用getTime()函数,获取对应的时间的毫秒时

    3)将两个时间相减,最后计算得出相差的时间

 

 1         String s1 = "2014-08-09 09:09:09";
 2         String s2 = "2026年08/01 10:10:10";
 3         //将这两个时间解析
 4         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 5         SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM/dd HH:mm:ss");
 6         try {
 7             //将s1转换为系统时
 8             Date date1 = sdf1.parse(s1);
 9             long time1 = date1.getTime();
10             //将s2转换为系统时
11             Date date2 = sdf2.parse(s2);
12             long time2 = date2.getTime();
13             //为确保temp为正值,要使用Math中的abs函数
14             long temp = Math.abs(time1-time2);
15             //获得了毫秒时之后,相差多少个月,年等等都可以计算了
16             long time = temp/1000/3600/24/31;
17             System.out.println(time);
18         } catch (ParseException e) {
19             System.out.println("格式不正确");
20         }

----------------------------------------------------------------------------

4.Calendar类

  在util包下

  public abstract class Calendar

  抽象类,因此需要通过getInstance函数获取对象

  Calendar中的内容是存放在Map集合中的,因此可以通过键来获取Map中存储的对应的数据.--->get(Calendar....)

  几个比较重要的函数:

  1)add(Calendar.YEAR,-3); 若add后面的这个参数是赋值的话,则表示时间往前倒推.例如,12月份,减1的话,就设置了当前的月份是11,依次类推

  2)set(year,month,day,.....);

 

  注意一下:在底层的源代码中,这些通过Calendar获取的年份的值,月份的值,都是有一个初始化值的.例如,若直接输出

  System.out.println(Calendar.DAY_OF_MONTH),最后得出的值是5.

  WHY:源码中是这样的.

  public final static int DAY_OF_MONTH = 5; 其它的也都是有默认的初始化值的

  结论:要想输出正确的日期数等等数据,一定要先使用get函数进行获取,否则输出的一律都是源码中的默认值(不用担心,eclipse不会报错并且在源码都

  有相对应的初始化值)

 

  日期的输出的演示:

1         Calendar c = Calendar.getInstance();
2         int year = c.get(Calendar.YEAR);
3         int month = c.get(Calendar.MONTH)+1;
4         int day = c.get(Calendar.DAY_OF_MONTH);
5         //2017年3月10日
6         System.out.println(year + "年" + month + "月" + day + "日");

--------------------------------------------------------------

 

  关于Calendar的一个小练习:

  使用最有效的方式获取指定年份中2月的最大天数。

  分析:

    1)要获取某一年的2月份有多少天的话,如果具体的按照平年和闰年来进行编程的话,程序会比较复杂;

    2)考虑到Calendar中有一个add函数,add(int field, int amount).可以通过更改第二个参数的值,来得到任意的一天.

    3)因此,可以考虑将3月1日的时间,往前倒推一天.这样得到的就是2月的最后一天

    4)DAY_OF_MONTH可以得到到底是28天还是29天

 1 public static void main(String[] args) {
 2         //假设获取从1500年-2050年之间的2月份的天数
 3         for(int year = 1500;year <= 2050;year++){
 4             //将日期设置为区间之间的year
 5             //set(int year, int month, int date).将时间设置为3月1日 
 6             //通过Calendar的对象来调用set函数
 7             //静态调用getInstance,获取对象
 8             Calendar c = Calendar.getInstance();
 9             c.set(year,2,1);
10             //将时间往前倒推一天
11             c.add(Calendar.DAY_OF_MONTH, -1);
12             //获取2月的天数
13             int day = c.get(Calendar.DAY_OF_MONTH);
14             System.out.println(year + "年的2月有" + day + "天!");
15         }
16     }

 

posted @ 2017-03-10 23:20  leevanes  阅读(424)  评论(0编辑  收藏  举报