首页 > 编程知识 正文

jdk1.8的新特性,jdk最新版本到几了

时间:2023-05-06 10:59:13 阅读:30596 作者:4495

3、日期

3.1、JDK 7日期的缺点

1、因为所有的日期类都是可变的,所以他们不是线程安全的。 这是Java日期类的最大问题之一

2、Java的日期/时间类定义不一致。 java.util和java.sql包包含日期类,而用于格式化和分析的类是在java.text包中定义的

3、java.util.Date同时包含日期和时间,而java.sql.Date只包含日期,包含在java.sql包中是不合理的。 另外两个班都有同样的名字。 这本身就是一个非常糟糕的设计。 时间、时间戳、格式和分析没有明确定义的类。 格式和分析需求包括java.text.DateFormat抽象类,但通常将简单数据格式类用于该需求

4、由于日期类不提供国际化,没有时区支持,Java引入了java.util.Calendar和java.util.TimeZone类,但存在所有这些问题

3.2、JDK8 Date优势

1、不变性:在新的日期/时间API下,所有类都保持不变,有利于多线程环境。

2、关注点分离:新的API明确将人可读的日期和时间与机器时间(unix Timestamp )分开,它分为日期(Date )、时间(time )、日期(DateTime )、时间戳)以及时区

3、清晰:在所有类中,方法都有明确的定义,并达到相同的行为。 例如,要获取当前实例,请使用now ) (为所有类定义format (和parse )方法)方法,而不是像以前那样具有独立的类。 为了更好地处理问题,所有类都使用工厂模式和策略模式。 使用其中一个类的方法,与其他类协同工作并不困难。

4、实用操作:所有新的日期和时间API类实现一系列方法,完成共同的任务。 例如,加法、减法、格式化、分析、从日期和时间中提取单独部分等。

5、可扩展性:新的日期/时间API在ISO-8601日历系统上运行,但也适用于非IOS日历。

3.3、JDK8 Date新字段

Java.time包中的类是不变的,是线程安全的。 新时间和日期的API位于java.time中,java8 time包含密钥字段的解密。 属性的含义

即时表示时间戳

LocalDate表示日期,例如2020-01-14

LocalTime表示时刻,例如12:59:59

本地日期表示具体时间2020-01-12 12:22:26

区域日期表示完整的日期和时间,包括时区,偏移基于UTC/格林威治标准时间

Period表示时间段

区域偏移表示时区的偏移。 例如,8:00

时钟代表时钟。 例如,获取当前美国纽约的时间

3.4、获取当前时间

Instant instant=Instant.now (; //获取当前时间戳

localdatelocaldate=local date.now (; //获取当前日期

本地时间本地时间=local time.now (; //获取当前时间

localdatetimelocaldatetime=local datetime.now (//获取当前的具体时间

zoneddatetimezoneddatetime=zoned datetime.now (; //获取时区的某个时间

3.5、字符串转换

jdk8:

String str=“2019-01-11”

datetimeformatterformatter=datetime formatter.of pattern (“yyyy-mm-DD”);

localdatelocaldate=local date.parse (str,formatter );

jdk7:

simpledateformatsimpledateformat=newsimpledateformat (" yyyy-mm-DD "

try {

datedate=simple date format.parse (str;

}catch(parseexceptione ) {

e .打印堆栈跟踪(;

}

3.6、Date转换LocalDate

import java.time.Instant;

导入Java.time.local date;

import java.time.ZoneId;

import java.util.Date;

公共类测试{

publicstaticvoidmain (字符串[ ] args ) { Date date=new Date; 即时即时=Da

te.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); // atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。 LocalDate localDate = instant.atZone(zoneId).toLocalDate(); System.out.println("Date = " + date); System.out.println("LocalDate = " + localDate);}

}
3.7、LocalDate转Date

import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;

public class Test {

public static void main(String[] args) { ZoneId zoneId = ZoneId.systemDefault(); LocalDate localDate = LocalDate.now(); ZonedDateTime zdt = localDate.atStartOfDay(zoneId); Date date = Date.from(zdt.toInstant()); System.out.println("LocalDate = " + localDate); System.out.println("Date = " + date);}

}
3.8、时间戳转LocalDateTime

long timestamp = System.currentTimeMillis();

Instant instant = Instant.ofEpochMilli(timestamp);

LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
3.9、LocalDateTime转时间戳

LocalDateTime dateTime = LocalDateTime.now();

dateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();

dateTime.toInstant(ZoneOffset.of("+08:00")).toEpochMilli();

dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
3.10、LocalDate方法总结

getYear() int 获取当前日期的年份
getMonth() Month 获取当前日期的月份对象
getMonthValue() int 获取当前日期是第几月
getDayOfWeek() DayOfWeek 表示该对象表示的日期是星期几
getDayOfMonth() int 表示该对象表示的日期是这个月第几天
getDayOfYear() int 表示该对象表示的日期是今年第几天
withYear(int year) LocalDate 修改当前对象的年份
withMonth(int month) LocalDate 修改当前对象的月份
withDayOfMonth(intdayOfMonth) LocalDate 修改当前对象在当月的日期
isLeapYear() boolean 是否是闰年
lengthOfMonth() int 这个月有多少天
lengthOfYear() int 该对象表示的年份有多少天(365或者366)
plusYears(longyearsToAdd) LocalDate 当前对象增加指定的年份数
plusMonths(longmonthsToAdd) LocalDate 当前对象增加指定的月份数
plusWeeks(longweeksToAdd) LocalDate 当前对象增加指定的周数
plusDays(longdaysToAdd) LocalDate 当前对象增加指定的天数
minusYears(longyearsToSubtract) LocalDate 当前对象减去指定的年数
minusMonths(longmonthsToSubtract) LocalDate 当前对象减去注定的月数
minusWeeks(longweeksToSubtract) LocalDate 当前对象减去指定的周数
minusDays(longdaysToSubtract) LocalDate 当前对象减去指定的天数
compareTo(ChronoLocalDateother) int 比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚,
isBefore(ChronoLocalDateother) boolean 比较当前对象日期是否在other对象日期之前
isAfter(ChronoLocalDateother) boolean 比较当前对象日期是否在other对象日期之后
isEqual(ChronoLocalDateother) boolean 比较两个日期对象是否相等

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。