Java 之 JDK 1.8 新增日期时间类型

一、原来的日期时间

  Java1.0中包含了一个Date类,但是它的大多数方法已经在Java 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:

  ① 可变性:象日期和时间这样的类对象应该是不可变的。Calendar类中可以使用三种方法更改日历字段:set()、add() 和 roll()。

  ② 偏移性:Date中的年份是从1900开始的,而月份都是从0开始的。

  ③格式化:格式化只对Date有用,Calendar则不行。

  ④此外,它们也不是线程安全的,不能处理闰秒等。

二、新增日期时间类型

  java 8中引入的java.time API 已经纠正了过去的缺陷,将来很长一段时间内它都会为我们服务。Java 8 吸收了 Joda-Time 的精华,以一个新的开始为 Java 创建优秀的 API。

java.time – 包含值对象的基础包
java.time.chrono – 提供对不同的日历系统的访问。
java.time.format – 格式化和解析时间和日期
java.time.temporal – 包括底层框架和扩展特性
java.time.zone – 包含时区支持的类

  

  Java 8 吸收了 Joda-Time 的精华,以一个新的开始为 Java 创建优秀的 API。新的 java.time 中包含了所有关于时钟(Clock),本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的 Date 类新增了 toInstant() 方法,用于把 Date 转换成新的表示形式。这些新增的本地化时间日期 API 大大简化了了日期时间和本地化的管理。

三、java.time 类

  1、本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)

LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储“生日、纪念日”等日期。
LocalTime表示一个时间,而不是日期
LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。

  


 方法名称


描述


now() / now(ZoneId zone)


静态方法,根据当前时间创建对象/指定时区的对象


of()


静态方法,根据指定日期/时间创建对象


getDayOfMonth()/getDayOfYear()


获得月份天数(1-31) /获得年份天数(1-366)


getDayOfWeek()


获得星期几(返回一个 DayOfWeek 枚举值)


getMonth()


获得月份, 返回一个 Month 枚举值


getMonthValue() / getYear()


获得月份(1-12) /获得年份


getHours()/getMinute()/getSecond()


获得当前对象对应的小时、分钟、秒


withDayOfMonth()/withDayOfYear()/withMonth()/withYear()


将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象


with(TemporalAdjuster  t)


将当前日期时间设置为校对器指定的日期时间


plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours()


向当前对象添加几天、几周、几个月、几年、几小时


minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours()


从当前对象减去几月、几周、几天、几年、几小时


plus(TemporalAmount t)/minus(TemporalAmount t)


添加或减少一个 Duration 或 Period


isBefore()/isAfter()


比较两个 LocalDate


isLeapYear()


判断是否是闰年(在LocalDate类中声明)


format(DateTimeFormatter  t)


格式化本地日期、时间,返回一个字符串


parse(Charsequence text)


将指定格式的字符串解析为日期、时间

  2、带时区的日期、时间的处理

    ZonedDateTime:一个在ISO-8601日历系统时区的日期时间,如 2007-12-03T10:15:30+01:00 Europe/Paris。

      其中每个时区都对应着ID,地区ID都为“{区域}/{城市}”的格式,例如:Asia/Shanghai等

now():使用系统时间获取当前的ZonedDateTime
now(ZoneId):返回指定时区的ZonedDateTime

    

    ZoneId:该类中包含了所有的时区信息,一个时区的ID,如 Europe/Paris

getAvailableZoneIds():静态方法,可以获取所有时区信息
of(String id):静态方法,用指定的时区信息获取ZoneId对象

    

     Clock:使用时区提供对当前即时、日期和时间的访问的时钟。

    Demo:

 1 public static void main(String[] args) {
 2         Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
 3         for (String string : availableZoneIds) {
 4             System.out.println(string);
 5         }
 6
 7         ZonedDateTime t = ZonedDateTime.now();
 8         System.out.println(t);
 9
10         ZonedDateTime t1 = ZonedDateTime.now(ZoneId.of("America/New_York"));
11         System.out.println(t1);
12
13 //        Clock clock = Clock.systemDefaultZone();
14         Clock c = Clock.system(ZoneId.of("America/New_York"));
15         System.out.println(c.getZone());
16         System.out.println(c.instant());
17     }

  3、 java.time.format.DateTimeFormatter 类

    该类提供了三种格式方法:

预定义的标准格式。如:ISO_DATE_TIME;ISO_DATE
本地化相关的格式。如:ofLocalizedDate(FormatStyle.MEDIUM)
自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)

    Demo:

 1 @Test
 2     public void test12(){
 3         LocalDateTime now = LocalDateTime.now();
 4
 5         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒  SSS毫秒  E 是这一年的D天");
 6         String string = df.format(now);
 7         System.out.println(string);
 8
 9         //预定义模式
10         DateTimeFormatter df2 = DateTimeFormatter.ISO_DATE_TIME;
11         System.out.println(df2.format(now));
12
13         DateTimeFormatter df3 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
14         System.out.println(df3.format(now));
15
16         DateTimeFormatter df4 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
17         System.out.println(df4.format(now));
18
19         DateTimeFormatter df5 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
20         System.out.println(df5.format(now));
21     }

原文地址:https://www.cnblogs.com/niujifei/p/12053868.html

时间: 2024-08-29 16:45:52

Java 之 JDK 1.8 新增日期时间类型的相关文章

MySQL学习分享--&gt;日期时间类型

日期时间类型 ①如果要用来表示年月日时分秒,一般使用datetime类型: ②如果要用来表示年月日,一般使用date类型: ③如果要表示时分秒,一般使用time类型: ④如果只是表示年份,一般使用year类型,需要注意的是5.5.27版本之前(不包含该版本)year类型有2位和4位格式这两种表示,在5.5.27版本之后2位格式的year已经不再被支持,year类型的值都会以YYYY的格式显示. year(2)被弃用我个人的理解是因为两位的显示宽度使得该类型表示模糊.不明确(显示的值仅仅是最后两位

20160421字符串类型;日期时间类型数学类型

第13天 2016-04-21 一.字符串类型   string Trim() - 去头尾的空格,中间的空格不能去. ToUpper() - 把字符串的字母全变成大写. ToLower() - 把字符串的字母全变成小写. StartsWith("子串") - 是否以“子串”开头,是-true EndsWith("子串") - 是否以“子串”结尾,是-true Contains("子串") - 是否包含“子串”,是-true Substring(起

Mysql 建表时,日期时间类型选择

mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  DATETIME  8 bytes  YYYY-MM-DD HH:MM:SS  1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00  TIMESTAMP  4 bytes  YYYY-MM-DD HH:MM:SS  197001010

SQL Server 2008对日期时间类型的改进

微软在备受多年的争议后,终于对日期时间数据类型开刀了,在新版的SQL Server 2008中一口气增加了4种新的日期时间数据类型,包括: Date:一个纯的日期数据类型. Time:一个纯的时间数据类型. DateTime2:新的日期时间类型,将精度提到到了100纳秒. DateTimeOffset:新的日期时间类型,在DateTime2的基础上增加了时区部分. 下面是在SQL Server 2008中日期时间数据类型的一个简单汇总表: 数据类型 格式 取值范围 精度 存储尺寸 date yy

mysql日期时间类型总结

MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间       日期格式                 日期范围 ------------ ---------   --------------------- ----------------------------------------- datetime       8 bytes   YYYY-MM-DD HH:MM:SS   1000-01-01 00:00:00 ~ 9999-12-31

字符串类型||日期时间类型||数学运算

字符串类型: string Trim() - 去头尾的空格,中间的空格不能去. ToUpper() - 把字符串的字母全变成大写.ToLower() - 把字符串的字母全变成小写. StartsWith("子串") - 是否以“子串”开头,是-trueEndsWith("子串") - 是否以“子串”结尾,是-trueContains("子串") - 是否包含“子串”,是-true Substring(起始位置,长度) - 从大字符串中,截取小的子

MySQL之日期时间类型

mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  DATETIME  8 bytes  YYYY-MM-DD HH:MM:SS  1000-01-01 00:00:00 9999-12-31 23:59:59  0000-00-00 00:00:00  TIMESTAMP  4 bytes  YYYY-MM-DD HH:MM:SS  19700101

MySQL 中的日期时间类型

日期时间类型中包含以下几种数据类型: DATE TIME DATETIME TIMESTAMP YEAR 各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0.TIMESTAMP 类型是个例外,给它设置一个超出范围的值时,将保存上该类型允许的最大值. MySQL 按标准格式 YYYY-MM-DD hh:mm:ss[.fraction] 输出日期时间,但设置或进行日期时间相关的比较时却支持灵活的多种格式,会自动解析.具体支持的输入格式可参见 Section 9.1.3, "Da

Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API ) ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  日期时间API (Date/Time API ) 1.Java8之前java.util.Date和Calendar类的弊端 1)最开始的时候,Date既要承载日期信息,又要做日期之间的转换,还要做不同日期格式的显示,职责较繁杂(不遵守单一职责). 后来从JDK 1.1 开始,这三项职责分开了: 使用Calendar类实现日期和