1.旧版日期时间的问题
在旧版本中JDK对于日期和时间这块的时间是非常差的。
/**
* 旧版日期时间设计的问题
*/
@Test
public void test01() throws Exception{
// 1.设计不合理
Date date = new Date(2021,05,05);
System.out.println(date);
// 2.时间格式化和解析操作是线程不安全的
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < 50; i++) {
new Thread(()->{
// System.out.println(sdf.format(date));
try {
System.out.println(sdf.parse("2021-05-06"));
} catch (ParseException e) {
e.printStackTrace();
}
}).start();
}
}
1、设计不合理,在java.util和java.sql的包中都有日期类,java.util.Date同时包含日期和时间的,而java.sql.Date仅仅包含日期,此外用于格式化和解析的类在java.text包下。
2、非线程安全,java.util.Date是非线程安全的,所有的日期类都是可变的,这是java日期类最大的问题之一。
3、时区处理麻烦,日期类并不提供国际化,没有时区支持。
2. 新日期时间API介绍
JDK 8中增加了一套全新的日期时间API,这套API设计合理,是线程安全的。新的日期及时间API位于 java.time 包
中,下面是一些关键类。
LocalDate :表示日期,包含年月日,格式为 2019-10-16
LocalTime :表示时间,包含时分秒,格式为 16:38:54.158549300
LocalDateTime :表示日期时间,包含年月日,时分秒,格式为 2018-09-06T15:33:56.750
DateTimeFormatter :日期时间格式化类。
Instant:时间戳,表示一个特定的时间瞬间。
Duration:用于计算2个时间(LocalTime,时分秒)的距离
Period:用于计算2个日期(LocalDate,年月日)的距离
ZonedDateTime :包含时区的时间
Java中使用的历法是ISO 8601日历系统,它是世界民用历法,也就是我们所说的公历。平年有365天,闰年是366
天。此外Java 8还提供了4套其他历法,分别是:
ThaiBuddhistDate:泰国佛教历
MinguoDate:中华民国历
JapaneseDate:日本历
HijrahDate:伊斯兰历
3.LocalDate常用基础操作
@Test
public void test01(){
// 1.创建指定的日期
LocalDate date1 = LocalDate.of(2021, 05, 06);
System.out.println("指定日期 = "+date1);
// 2.得到当前的日期
LocalDate now = LocalDate.now();
System.out.println("当前日期 = "+now);
// 3.根据LocalDate对象获取对应的日期信息
System.out.println("年:" + now.getYear());
System.out.println("月:" + now.getMonth().getValue());
System.out.println("日:" + now.getDayOfMonth());
System.out.println("星期:" + now.getDayOfWeek().getValue());
}
4.LocalTime常用基础操作
@Test
public void test02(){
// 1.得到指定的时间
LocalTime time = LocalTime.of(5,26,33,23145);
System.out.println("指定时间->" + time);
// 2.获取当前的时间
LocalTime now = LocalTime.now();
System.out.println("当前时间->" + now);

最低0.47元/天 解锁文章
1324

被折叠的 条评论
为什么被折叠?



