Java日期:第一代日期(java.util.Date和java.util.Calendar)、第二代日期(java.time包中的类)以及第三代日期(Java 8引入的java.time包中的更新)

Java中的日期和时间处理在不同的版本中经历了多次改进和演变。下面我会介绍Java中的三个主要日期和时间处理API:第一代日期(java.util.Date和java.util.Calendar)、第二代日期(java.time包中的类)以及第三代日期(Java 8引入的java.time包中的更新)。

第一代日期:java.util.Date和java.util.Calendar
这是Java早期提供的日期和时间处理方式。java.util.Date类用于表示日期和时间,但它存在一些问题,例如对不可变性的支持不足,以及与时区相关的处理不佳。java.util.Calendar类在一定程度上解决了这些问题,但仍然不够直观和易用。

问题:

  • 可变性:java.util.Date是可变的,通过源码(public class Date)可知,它并不是final的。这会导致潜在的线程安全问题
  • 设计不佳:日期和时间处理的设计不够优雅,例如月份从0开始,不符合直觉。

第二代日期:java.time包中的类
Java 8引入了java.time包,其中包含了一组全新的日期和时间处理类,用于更好地处理日期和时间问题,解决了第一代日期类的问题。

主要类包括:

  • LocalDate:表示日期(年、月、日),不包含时间和时区信息。
  • LocalTime:表示时间(时、分、秒、毫秒),不包含日期和时区信息。
  • LocalDateTime:结合了LocalDateLocalTime表示日期和时间,但仍不包含时区信息
  • ZonedDateTime:包含完整的日期、时间和时区信息。
  • 等等。

优点:

  • 不可变性:java.time包中的类都是不可变的,更适合多线程环境。
  • 设计优雅:类的设计更符合直觉,例如月份从1开始。
  • 易于计算:提供了更方便的日期和时间计算方法。

第三代日期:java.time包中的更新
在Java 8之后,java.time包还进行了一些更新,以进一步改进日期和时间处理。

Java 8之后的一些更新:

  • Java 8引入的java.time包已经是一个强大的日期和时间处理库,因此后续的Java版本没有引入大的变化。
  • Java 9、10、11等版本中主要是一些小的改进和性能优化。

选择问题:

  • 第一代日期:不推荐使用,因为它存在可变性和设计问题,不利于编程和维护。

  • 第二代日期:推荐在Java 8及更高版本中使用java.time包中的类。它们提供了更好的设计和功能,适用于大多数的日期和时间处理需求。

  • 第三代日期:考虑到性能和功能上的提升,Java 8引入的java.time包已经足够满足大多数需求,所以在后续版本中没有必要强制迁移到新的API。只有在需要特定的新功能或改进时,才需要考虑更新使用。

综上所述,大多数情况下,推荐使用第二代日期(java.time包中的类),除非有特定的需求需要使用第三代日期(如果有的话)。避免使用第一代日期(java.util.Datejava.util.Calendar)由于其设计和问题。

第二代日期的代码:

public class LocalDateTime_ {
    public static void main(String[] args) {
    	//通过now()得到现在的时间
        LocalDateTime now = LocalDateTime.now();
        //使用DateTimeFormatter类的ofPattern方法定义要转换的格式需求
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss E");//E表示星期几
        //通过DateTimeFormatter的对象调用format方法得到转换的日期,得到的日期是字符串(可以查看源码)
        String format = dateTimeFormatter.format(now);
        System.out.println(format);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值