Java8的新功能-日期和时间。
1.背景
Java 8通过发布新的日期时间API (JSR 310)进一步加强了日期和时间的处理。
在旧版本的Java中,日期和时间API有许多问题,包括:
非线程安全?Java.util.Date是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一。
不规则设计?Java中日期/时间类的定义不一致。java.util和java.sql的包中都有日期类另外,用于格式化和解析的类都是在java.text的包中定义的虽然java.util.Date同时包含日期和时间,但是java.sql.Date只包含日期,所以将其包含在java.sql包中是不合理的。另外两个类同名,这本身就是一个非常糟糕的设计。
时区处理麻烦?date类不提供国际化,也没有时区支持,所以Java引入了java.util.Calendar和java.util.TimeZone类,但它们也存在上述所有问题。
2.Java 8中java.time包下的类。
如上图所示,在java8中,java.time包主要包含以下主要类:
即时:时间戳。
持续时间:持续时间和时间差。
LocalDate:只包含日期,例如:2016年10月20日。
LocalTime:仅包括时间,例如:23:12336010。
LocalDateTime:包括日期和时间,例如:2016年10月20日,23:14336021。
期间:时间段。
ZoneOffset:时区偏移量,例如:8:00。
ZonedDateTime:带时区的时间。
时钟:一种时钟,如获取美国纽约的当前时间。
新的java.time包括所有处理日期、时间、日期/时间、时区、时刻、持续时间和时钟的操作。
本地时间和本地日期之间的差异。
LocalTime表?时间、小时、分钟和秒,LocalDate表?期间,年份?
获取当前时间。在Java8中,通过以下方式获取当前时间:
local date today=local date . now();
int year=today . getyear();
int month=today . GetMonthValue();
int day=today . getdayofmonth();
System.out.printf('年: %d月: %d日: %d t %n ',年,月,日);
指定创建日期的时间。
local date date=local date . of(2021,01,01);
查闰年直接做?LocalDate的IsLeapYear可以判断是否是闰年。
local date now date=local date . now();
//判断闰年。
boolean leapYear=now date . islapyear();
算两个?期间和之间的天数?数数
在Java 8中可能吗?类进行计算。
Period period=Period .介于(2021,1,5)的LocalDate.of(2021,2,5)之间;
在java.time.format包中。
日期时间格式化程序:时间格式化程序。
时间被格式化为指定格式的字符串:
local datetime time now=local datetime . now();
System.out.println('在格式化程序之前:' time now ');
datetime formatter datetime formatter=datetime formatter . of pattern(' yyyy-MM-DD hh :MM :s ');
string after format=datetime formatter . format(time now);
System.out.println('在formatter之后:' after format ');
输出:
格式化程序之前:2021-10-27t 11:49:37 . 4037037
格式化程序后:2021-10-27 11:49:37
该字符串的格式为时间类型:
字符串TiME format=' 2021-10-27 11:49:37 ';
//HH代表24小时制,HH代表12小时制。
datetime formatter=datetime formatter . of pattern(' yyyy-MM-DD hh :MM :s ');
local datetime local date=local datetime . parse(time format,formatter);
system . out . println(local date);
输出:
2021-10-27T11:49:37
3.比较java.util.date
时间被格式化为指定格式的字符串:
//1.将日期类型转换为具有相应格式的字符串,并且应该始终创建简单日期格式。
simpledate format SDF=new simpledate format(' yyyy-MM-DD hh :MM 3360s ');
日期日期=新日期();
String oldDate=sdf.format(日期);
system . out . println(old date);
输出:
2021-10-27 11:57:31
将字符串转换为指定格式的时间:
//2.将字符串转换为指定格式的时间,该格式始终由SimpleDateFormat创建。
simpledate format SDF=new simpledate format(' yyyy-MM-DD hh :MM 3360s ');
尝试{
date date=SDF . parse(' 2021-10-27 11:57:31 ');
System.out.println(日期);
} catch(语法分析异常e)}
e。print stack trace();
}
菲兰达:
2002年10月27日,星期三
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/51638.html