JAVA——有关日期时间的各种类

在java中有很多有关日期时间操作的类,这些类之间有什么关系和区别呢?首先,来了解一下它们之间的继承结构。

一、java.util.Date

构造方法

public Date()//当前时间
public Date(long date)//参数date是自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。

常用方法

1.把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 。

public String toString()

其中:

  • dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat);
  • zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。
  • yyyy 是年份,显示为 4 位十进制数。

重写了Object的toString()方法。每次我们打印输出java.util.Date类型的对象时,输出的字符串都不是标准的“2018-09-12 21:09:08”这样的形式,而是这样:

Thu Jan 15 14:51:54 CST 1970

就是因为Date对象调用了它的toString()方法。

2.设置Date对象的时间:

public void setTime(long time)

3.返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

public long getTime()

 

二、java.sql.Date

为什么要有java.sql.Date这个类呢?

我们发现除了父类Date在util包下,它的三个子类都是在sql包下的。因为在和数据库打交道时(也就是在执行sql语句时),我们要用到sql包下的时间类,其他情况下我们通常用util包下的Date来格式化日期或者得到当前时间。为什么和数据库打交道时不能用java.util.Date?因为PreparedStatement有三个设置时间的方法:setDate()、setTime()、setTimeStamp(),这三个方法的第二个参数分别是java.sql.Date、java.sql.Time和java.sql.TimeStamp,并没有提供参数是java.util.Date的方法。除此之外,ResultSet也有三个get()方法与之对应,且返回的时间类型也是sql包下的这三个类。

构造方法

public Date(long date)

与它父类的有参构造方法一样。

常用方法

1.格式化日期转义形式 yyyy-mm-dd 的日期。

public String toString()

重写了父类的toString()方法,只返回日期,不返回时间。当我们打印java.sql.Date类型的对象时,会输出这种形式:

1970-01-15

2. "yyyy-mm-dd" 形式的日期的 String 转换为Date对象: 如果给定日期不是 转义形式 (yyyy-mm-dd)会抛IllegalArgumentException 

public static Date valueOf(String s)

3.与父类一样拥有setTime()和getTime()方法。

 

三、java.sql.Time

构造方法

public Time(long time)

常用方法

1.重写了toString()方法,对时间进行格式化,返回 hh:mm:ss 格式的 String。

public String toString()

2."hh:mm:ss" 格式的时间字符串转换为 Time ,格式错误会抛出异常。

public static Time valueOf(String s)

3.同样拥有getTime()和setTime()

 

四、java.sql.TimeStamp

构造方法

public Timestamp(long time)

常用方法

1.重写了toString(),返回 yyyy-mm-dd hh:mm:ss.fffffffff 格式的 字符串:

public String toString()

2.将" yyyy-mm-dd hh:mm:ss[.f...] "格式的字符串转换为 Timestamp对象:格式错误会抛异常

public static Timestamp valueOf(String s)

3.同样拥有getTime()和setTime()方法。

 

五、操作数据库用哪个类

看我们想要保留日期还是时间,如果只想保留日期,那么用java.sql.Date获取,如果只想保留时间,那么用Time获取,如果时间日期都要保留,那么用TimeStamp获取。另外,在简单实体类中,日期属性的类型一般习惯使用java.util.Date,因为它有无参构造,表达当前时间比较方便。所以要写一个工具类来转换sql包下的那三个类和java.util.Date。

示例:用sql包下的三个类分别获取mysql中字段为datetime值为2018-10-03 16:38:53的时间(由于数据库连接代码太多,所以只贴重点代码)

                java.sql.Date date=rs.getDate("createDate");
                Date d1=new Date(date.getTime());
                System.out.println(d1);

                Time time=rs.getTime("createDate");
                Date d2=new Date(time.getTime());
                System.out.println(d2);

                Timestamp ts=rs.getTimestamp("createDate");
                Date d3=new Date(ts.getTime());
                System.out.println(d3);

运行结果:

Wed Oct 03 00:00:00 CST 2018
Thu Jan 01 16:38:53 CST 1970
Wed Oct 03 16:38:53 CST 2018

只有用TimeStamp获取得到的时间才是完整的,Date获取到的只有日期,Time获取到的只有时间。

 

六、SimpleDateFormat

SimpleDateFormat是处理Date与String相互转化格式的类。

构造方法(其中一个)

public SimpleDateFormat(String pattern)

参数pattern是描述日期和时间格式的字符串

常用方法

1.将对象格式化为字符串。如果该 SimpleDateFormat 对象不能格式化给定的对象则抛IllegalArgumentException

public final String format(Object obj)

2.将字符串转换为java.util.Date对象:

public Date parse(String source) throws ParseException

示例: 

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) throws Exception {

        SimpleDateFormat format=new SimpleDateFormat("yyyy--MM--dd HH:mm:ss");
        String str=format.format(new Date());
        System.out.println(str);

        Date d=format.parse(str);
        System.out.println(d);

    }
}

运行结果:

2018--10--06 15:17:03
Sat Oct 06 15:17:03 CST 2018

 

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值