java日期处理一(Calendar,Date) .

Time  bTime=Time.valueOf("00:00:00");//只是记录时间,跟日期没关系.打印出来也是 00:00:00
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    Calendar  iCalendar=Calendar.getInstance();
                    iCalendar.clear();
System.out.println( sdf.format(iCalendar.getTime())+"
" );//1970-01-01


(注意)另外一篇介绍时间 日期的帖子

   虽然我们当我们使用日期时经常会想到使用Date类来表示,但是仔细查看Date类的方法,发现很多都已过时了,当我们想拿到或设置Date的年月日时分秒,那怎么办呢?

一、创建日期对象
        所以Java提供了另一功能更加强大的Calendar,我们使用Calendar就可以了。

         比如Date nowDate = new Date();可以用Calendar now = Calendar.getInstance();这样子可以拿到一个当前时间的Calendar对象(当然可以再用now.setTime(nowDate)来用某个Date指定这个Calendar时间),调用now.getTime()就可以拿到Date对象,调用now.getTimeInMills()可以拿到long类型的毫秒数,调用now.get(Calendar.YEAR)、now.get(Calendar.DAY_OF_MONTH)等就可以拿到年月日时分秒,Calendar.YEAR,Calendar.MONTH就是field字段,设置时间的时候就可以用now.set(field,value)来设定,当然也可以用封装好的now.set(year,month,day)来设置。 

二、格式化

      当我们需要对Date、Calendar、Timestamp做格式化的时候就可以用SimpleDateFormat sdf = new SimpleDateFormat("yyyy年-MM月-dd日-E hh:mm:ss");

      然后sdf.format(Date)

          sdf.format(Calendar.getTime())

          sdf.format(Timestamp),这样就能按效果格式化时间格式了。

三、日期比较先后

      两个Date类型的比较可以用Date.after()与Date.before()或Date.compareTo()来比较时间先后。

总结:拿到Date年月日时分秒应该用这个Date来构造一个Calendar对象然后再来拿,至于格式化就用sdf就行了。


将"yyyy-mm-dd"格式的字符串转换为java.sql.Date:

SimpleDateFormat bartDateFormat =   new SimpleDateFormat("yyyy-MM-dd");  
String dateStringToParse = "2007-7-12";  
try{  
       java.util.Date date = bartDateFormat.parse(dateStringToParse);  
       java.sql.Date sqlDate = new java.sql.Date(date.getTime());
       System.out.println(sqlDate.getTime());  
 
catch (Exception ex) {  
     System.out.println(ex.getMessage());  
}

 

java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp区别和联系:

 

在java有关的项目开发工作中,我们常常要java.util.Date,  java.util.Calendar,   java.sql.Date,    java.sql.Time,   java.sql.Timestamp等几个类进行日期的处理和分析,那么这几个函数之间有什么样的联系,它们又有什么区别呢?

首先来说说它们之间的关系,

java.util.Date这个类是java.sql.Date,  java.sql.Time,  java.slq.Timestamp这三个类的父类。这三个类对java.util.Date类进行了包装。

java.sql.Date类屏蔽了java.util.Date类的时间有关的方法(形如:hh:mm:ss),因此,不可以通过这个类访问时间有关的信息,比如,如果你通过sqlDate.getHour()方法去访问小时信息,此方法会抛出一个IllegalArgumentException异常。这是因为java.sql.Date在继承java.util.Date类的时候对父类进行了重写,禁用了时间访问的方法。之所以这么处理,是为了和数据库的Date数据类型相匹配,数据库的Date数据类行只是保存日期有关的字段。

Java.sql.Time屏蔽了java.util.Date的日期有关的字段(形如:yyyy-MM-dd),因此,不能通过这个类访问日期有关的信息,比如:如果你通过sqlTime.getYear()方法去获取年有关的信息,此方法会抛出一个IllegalArgumentException异常。这是因为java.sql.Time在继承java.util.Date类的时候对父类进行了重写,禁用了日期访问的方法。之所以这么处理,是为了和数据库的Time数据类型相匹配,数据库的Time数据类行只是保存时间有关的字段。

Java.sql.Timestamp字段则对java.util.Date这个类进行了扩充,它在java.util.Date类的基础上增加了毫秒的时间访问控制,因此,你可以通过getNanos()(毫微秒)方法去获取时间的毫微秒数(注意此处获取的时间是以毫微秒为单位的,1秒等于十亿毫微秒),同样的,这也是为了和数据库中的Timestamp数据类型进行匹配。

理清了上述四个类的关系,那么java.util.Date和java.util.Calendar类有什么关系呢?

Java.util.Calendar类是java.util.Date类的一个更加深入,更加全面的替代。Java.util.Calendar类支持java.util.Date的所有功能,此外,Calendar还引入了多语言,多区域的特性,可以根据需要获取不同区域,不同时区的时间,Calendar还增加了比Date更加方便和快捷的许多操作,如获取一年当中的第几个星期,各个月的天数等便捷的方法。

Java.util.Calendar区别与java.util.Date的几个地方也需要注意一下:首先,Calendar增加了毫秒的时间段,通过它可以获取时间点的毫秒值,而java.util.Date只是精确到秒。其次,Calendar过去年的时候是当前年份比如:2010,而Date获取年份的时获取到的是当前年份-1900的一个值(2010-1900=110,因此,你调用getYear后过去的值就是110)。最后Calendar是一个抽象类,之所以能够实例化,是因为此处的Calendar充当了一个类似于工厂的作用,在getInstance方法中实例化了Calendar子类GregorianCalendar,并把它返回给客户使用。

原文地址:https://www.cnblogs.com/luckForever/p/7254435.html