小王学习录
今日摘录
儿食剩骨, 正餐奉母
在Java中,生成时间的类主要集中在java.util
和java.time
包中。以下是详细的介绍:
java.util 包
Date
构造方法:
Date(): 创建一个表示当前时间的对象。
Date(long date): 使用给定的毫秒数创建一个日期对象。
说明:遗留类,不推荐用于新的开发。
Calendar
构造方法:
Calendar类本身是抽象类,无法直接实例化,通常使用getInstance()静态工厂方法来获取其子类(如GregorianCalendar)的一个实例。
说明:提供了更灵活的时间操作能力,但也是遗留类。
GregorianCalendar
构造方法:
GregorianCalendar()
GregorianCalendar(Locale aLocale)
GregorianCalendar(TimeZone zone)
GregorianCalendar(TimeZone zone, Locale aLocale)
GregorianCalendar(int year, int month, int dayOfMonth)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
说明:Calendar的具体实现,提供了公历系统的日期操作。
java.time 包 (自 Java 8 引入)
LocalDate
构造方法:
主要通过静态工厂方法创建实例,例如of(int year, Month month, int dayOfMonth)或now()等。
说明:只包含日期,不含时区信息。
LocalTime
构造方法:
同样主要通过静态工厂方法创建实例,如of(int hour, int minute)等。
说明:只包含时间,不含时区信息。
LocalDateTime
构造方法:
静态工厂方法,如of(LocalDate date, LocalTime time)等。
说明:包含日期和时间,没有时区信息。
ZonedDateTime
构造方法:
静态工厂方法,如of(LocalDateTime localDateTime, ZoneId zone)等。
说明:包含日期、时间和时区信息。
OffsetDateTime
构造方法:
静态工厂方法,如of(LocalDateTime localDateTime, ZoneOffset offset)等。
说明:存储固定偏移量的时间点。
Instant
构造方法:
Instant()(已废弃),应该使用now()等静态工厂方法。
说明:表示时间线上的瞬间,从Unix纪元开始计算。
Duration
构造方法:
Duration(long seconds, long nanos)
主要通过静态工厂方法创建,如between(Temporal startInclusive, Temporal endExclusive)等。
说明:基于秒和纳秒计算两个时间点之间的时间量。
Period
构造方法:
Period(int years, int months, int days)
静态工厂方法,如between(LocalDate startDateInclusive, LocalDate endDateExclusive)等。
说明:描述两个日期之间的年月日数量。
DateTimeFormatter
构造方法:
私有构造器,所以不能直接实例化;通过静态工厂方法创建格式化器,如ofPattern(String pattern)等。
说明:提供日期和时间的格式化支持。
区别
设计哲学:旧类如Date和Calendar缺乏不可变性和线程安全性,API不够直观。而java.time包的设计更加现代,具有不可变性、线程安全以及更直观的API。
功能特性:java.time包提供了更为丰富和准确的功能,比如更好的时区处理、日期时间解析和格式化等。
易用性:新包中的类设计更为清晰,易于理解和使用,减少了错误的发生几率。
对于新的Java项目,强烈建议使用java.time
包中的类来处理日期和时间,以获得更好的性能和易用性。此外,这些类的构造方法大多被静态工厂方法取代,以提供更加灵活和可读的实例化方式。