1.java.util.Date 日期类
 构造函数  Date() 表示当前时间
    Date(int ,int ,int) 填入年月日,年份需减去1900,月份为0-11
    Date(int,int,int,int,int,int)年月日时分秒
 主要方法:
  after() before(),getTime();
  equals() toString(),
  getYear() getMonth() getDate()getDay()
 java.text.SimpleDateFormat类 :格式化一个日期对象,成为一个字符串
   2.java.util.Calendar 日历类
 抽象类,不可直接实例化,使用Calendar.getInstance()的方式获得实例
 设置时间:setTime(Date),
    set(int ,int ,int) 年月日
    set(int ,int ,int,int,int) 年月日时分
    set(int ,int ,int,int,int,int) 年月日时分秒
    set(Calendar.YEAR,2012) 单独设置时间部分
 主要方法:
  get(Calendar.Year) 获得时间的部分
  getTime() 转化为Date类
  add(Calendar.Year,1) 添加时间(添加一年)
 3.SimpleDateFormat类:
将一个日期(Date)类转换成你所需要的字符串表现形式。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");创建一个SimpleDateFormat类的对象sdf,将按照格式“yyyy-MM-dd”转换Date类的对象。
String str=sdf.forMat(date):将date对象转换成一个字符串。
 

 

(Util包)日期,SimpleDateFormate


 一、Java的Date 类
 Date 类实际上只是一个包装类, 它包含的是一个长整型数据。
 包装类,通过包装类可以把基本数据类型变为一个对象来使用。
 表示的是从GMT(格林尼治标准时间)1970年 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数.


 ★创建一个日期对象
 让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子.
 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间.


  

//获取系统时间  date/time    
 
        Date date = new Date();     
 
        System.out.println(date.getTime());


 结果是 1440988952408
 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象,
 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了
 System.currentTimeMillis() 方法来从系统获取日期.
 
 那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了.
 我们如何才能以一种用户明白的格式来显示这个日期呢?
 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了.
 
  二、  Java的SimpleDateFormat类
 Java中怎么才能把日期转换成想要的格式呢,或把字符串转换成一定格式的日期,如把数据库中的日期或时间转换成自己想要的格式,JAVA中提供了SimpleDateFormat类可以实现,以下是SimpleDateFormat的用法及实例:

java.text类 SimpleDateFormat 
 
  java.lang.Object 
 
    java.text.Format 
 
        java.text.DateFormat 
 
            java.text.SimpleDateFormat


 
 SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。
 它允许进行格式化(日期 -> 文本)、 解析(文本 -> 日期)和规范化。
 SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的getTimeInstance、getDateInstance 或 getDateTimeInstance 来创建日期-时间格式器。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。


 ★日期数据的定制格式 (日期转字符串)
 假如我们希望指定日期数据的格式, 比方星期四-9-10-2015年. 下面的例子展示了如何完成这个工作:

SimpleDateFormat f=  new SimpleDateFormat("EE-MM-dd-yyyy");        
 
   Date date = new Date();        
 
   System.out.println(f.format(date));


 
 只要通过向SimpleDateFormat 的构造函数传递格式字符串"EE-MM-dd-yyyy",
 我们就能够指明自己想要的格式. 你应该可以看见,
 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分.
 EE是星期, MM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.
 
 ★将文本数据解析成日期对象  (字符串转日期)
 假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串
 并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy"
 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据.
 我们的例子, 显示在下面, 将解析文本字符串"9-10-2015"并创建一个长整型值的日期对象.


SimpleDateFormat f = new SimpleDateFormat("MM-dd-yyyy");         
 
         String dateStringToParse = "9-29-2001";         
 
    Date date = f.parse(dateStringToParse);                   
 
      System.out.println(date.getTime());

    



 ★计算日期之间的间隔
 

String input = "1982-05-25";  
 
   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");  
 
   try{  
 
    Date d1 = formatter.parse(input); 
 
    Date d2 = new Date();  
 
    long diff = d2.getTime() - d1.getTime();  
 
    System.out.println("相差 " + (diff/(1000*60*60*24)) + " 天."); 
 
   }catch(ParseException e){  
 
    System.out.println("unparseable using " + formatter);  
 
   }


 ★记录一件事所花费的时间 
 

long t0,t1; 
 
   t0 = System.currentTimeMillis();  
 
   System.out.println("starts at " + t0);  
 
   int k = 0;  
 
   for(int i =0;i<100000;i++){  
 
    k += i;  
 
   }  
 
   t1 = System.currentTimeMillis();    
 
   System.out.println("ends at " + t1);  
 
   System.out.println("This run times " + (t1-t0) + "ms.");


每一个标志代表什么意思?
---------------------------------参考---------------------------------------------------
SimpleDateFormat日期-时间格式模式参数:
字母  日期或时间元素 表示  示例 
G  Era 标志符  Text  AD 
y  年  Year  1996; 96 
M  年中的月份  Month  July; Jul; 07 
w  年中的周数  Number  27 
W  月份中的周数  Number  2 
D  年中的天数  Number  189 
d  月份中的天数  Number  10 
F  月份中的星期  Number  2 
E  星期中的天数  Text  Tuesday; Tue 
a  Am/pm 标记  Text  PM 
H  一天中的小时数(0-23)  Number  0 
k  一天中的小时数(1-24)  Number  24 
K  am/pm 中的小时数(0-11)  Number  0 
h  am/pm 中的小时数(1-12)  Number  12 
m  小时中的分钟数  Number  30 
s  分钟中的秒数  Number  55 
S  毫秒数  Number  978 
z  时区  General time zone  Pacific Standard Time; PST; GMT-08:00 
Z  时区  RFC 822 time zone  -0800 
---------------------------------参考---------------------------------------------------


 ★MySQL 日期类型:日期格式、所占存储空间、日期范围 比较。
注意:我们项目中常用:datetime表示日期时间。例如: insert into rrr (bbb) values ('2015-11-11 11:11:11')


日期类型         存储空间        日期格式                   日期范围
------------  ---------    ---------------------   -----------------------------------------
datetime        8 bytes     YYYY-MM-DD HH:MM:SS  1000-01-01 00:00:00-9999-12-31 23:59:59
timestamp       4 bytes     YYYY-MM-DD HH:MM:SS  1970-01-01 00:00:01 ~ 2038
date            3 bytes     YYYY-MM-DD                   1000-01-01  ~ 9999-12-31
year            1 bytes     YYYY                            1901~ 2155



 三、Java Calendar 类时间操作
 Calendar 类是抽象类,不能new   
  // 创建 Calendar 对象  
     Calendar calendar = Calendar.getInstance(); 
 见代码:CalkendarTest.java
 参考工具类:CalkendarUtil.java


  ★Date和Calendar的区别
  类 Date 表示特定的瞬间,精确到毫秒。
 Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR
 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
 瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000)的偏移量。
 起始最明显的就是.前者是日期.后者是日历..就好比你家里的挂钟和挂历了..
 同样是对时间的操作.但是前者的粒度细些时间控制会比较方便..后者对日期的控制会比较方便..
 主要就是 日期.. 日历...前者操作时间,时分秒,后者控制年月日.
 还有关键 前者是类.后者是抽象类.前者能new 后者无法new 获取后者的对搜索象必须通过子类的实例化类获得...