New Date API介绍
一、新的Date API介绍
LocalDate
LocalTime
Instant
Duration
Period
formatter
parsejdk以前的java.util.Date存在的问题
1)比如new Date(119, 2, 18)表示Mon Mar 18 00:00:00 CST 2019,2019年3月18日,year要从1900年加起,month是从0开始,day是从1开始。
2)SimpleDateFormat不是线程安全的,比如多线程情况下simpleDateFormat.parse会出问题。
3)Date名字叫日期,但是后面还有time时间
例子如下:
package com.cy.java8; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; public class DateTest { public static void main(String[] args) throws ParseException {
Date date = new Date(119, 2, 18);
System.out.println(date); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
for(int i=0; i<5; i++){
new Thread(()->{
try {
Date parseDate = sdf.parse("20190505");
System.out.println(parseDate);
} catch (ParseException e) {
e.printStackTrace();
} }).start();
}
}
}
二、LocalDate
package com.cy.java8; import java.time.LocalDate;
import java.time.temporal.ChronoField; public class DateTest { public static void main(String[] args) {
testLocalDate();
} /**
* LocalDate是线程安全的
*/
private static void testLocalDate(){
LocalDate localDate = LocalDate.of(2019, 10, 2);
System.out.println(localDate.getYear());
System.out.println(localDate.getMonth());
System.out.println(localDate.getMonthValue());
System.out.println(localDate.getDayOfYear());
System.out.println(localDate.getDayOfMonth());
System.out.println(localDate.getDayOfWeek()); System.out.println(localDate.get(ChronoField.YEAR));
System.out.println(localDate.get(ChronoField.MONTH_OF_YEAR));
System.out.println(localDate.get(ChronoField.DAY_OF_MONTH)); LocalDate now = LocalDate.now();
System.out.println(now);
}
}
console:
2019
OCTOBER
10
275
2
WEDNESDAY
2019
10
2
2019-10-02
三、LocalTime、Instant、Duration、Period简单介绍
package com.cy.java8; import java.time.*; public class DateTest { public static void main(String[] args) throws InterruptedException {
testLocalTime();
System.out.println("================================="); testCombineLocalDateAndTime();
System.out.println("================================="); testInstant();
System.out.println("================================="); testDuration();
System.out.println("================================="); testPeriod();
} private static void testLocalTime(){
LocalTime time = LocalTime.now();
System.out.println(time); System.out.println(time.getHour());
System.out.println(time.getMinute());
System.out.println(time.getSecond());
} private static void testCombineLocalDateAndTime(){
LocalDate localDate = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.of(localDate, time);
System.out.println(localDateTime); LocalDateTime now = LocalDateTime.now();
System.out.println(now);
} private static void testInstant() throws InterruptedException {
Instant start = Instant.now();
Thread.sleep(1000);
Instant end = Instant.now(); Duration duration = Duration.between(start, end); //类似于之前的System.currentTimeMillis
System.out.println(duration.toMillis());
} private static void testDuration(){
LocalTime time = LocalTime.now();
LocalTime beforeTime = time.minusHours(1);
Duration duration = Duration.between(time, beforeTime);
System.out.println(duration.toHours());
} private static void testPeriod(){
Period period = Period.between(LocalDate.of(2017, 9, 1), LocalDate.of(2019, 10, 2));
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());
}
}
console:
21:03:28.136
21
3
28
=================================
2019-10-02T21:03:28.137
2019-10-02T21:03:28.137
=================================
1001
=================================
-1
=================================
2
1
1
四、formatter、parse
package com.cy.java8; import java.time.*;
import java.time.format.DateTimeFormatter; public class DateTest { public static void main(String[] args){
testDateFormat();
System.out.println("=============================="); testDateParse();
} private static void testDateFormat(){
LocalDate localDate = LocalDate.now();
String format1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(format1); String format2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println(format2); DateTimeFormatter myFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String format3 = localDate.format(myFormatter);
System.out.println(format3);
} private static void testDateParse(){
String date0 = "20191002";
LocalDate localDate0 = LocalDate.parse(date0, DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(localDate0); String date1 = "2019-10-02";
LocalDate localDate1 = LocalDate.parse(date1, DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println(localDate1); String date2 = "2019年10月02日";
LocalDate localDate2 = LocalDate.parse(date2, DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
System.out.println(localDate2);
}
}
console:
20191002
2019-10-02
2019年10月02日
==============================
2019-10-02
2019-10-02
2019-10-02
----
New Date API介绍的更多相关文章
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
- Commons-lang API介绍
4.1 Commons-lang API介绍 4.1.1 StringUtils 4.1.2 StringEscapeUtils 4.1.3 ArrayUtils 4.1.4 DateUtils 4. ...
- 乐字节-Java8新特性之Date API
上一篇文章,小乐给大家带来了Java8新特性之Optional,接下来本文将会给大家介绍Java8新特性之Date API 前言: Java 8通过发布新的Date-Time API来进一步加强对日期 ...
- Solr系列三:solr索引详解(Schema介绍、字段定义详解、Schema API 介绍)
一.Schema介绍 1. Schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段.字段的数据类型.字段该索引存储. 2. Schema 的定义方式 ...
- 常用ArcGIS for Silverlight 开发API介绍
1.API介绍 2.Map对象 3.Layer对象 4.Symbol对象 5.Task对象
- python学习笔记(win32print API介绍)
最近博主在研究用python控制打印机 这里整理下win32print的API介绍,官网地址http://timgolden.me.uk/pywin32-docs/win32print.html Op ...
- js 获取时间 new Date()详细介绍
javaScript系列:js中获取时间new Date()详细介绍 (2012-03-31 09:54:25) 转载▼ 标签: js时间 new date() 字符类型 转换 分类: study-j ...
- 使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍
一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...
- JavaScript Date对象介绍
原文:JavaScript Date对象介绍 Date 日期和时间对象 1. 介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new ...
随机推荐
- 你在和脚本谈恋爱(自动化在IM聊天中的应用)
谢谢打开这篇文章的每个你 测开之分层自动化(Python)招生简章 Python自动化测试报告美化 在python中进行数据驱动测试 太嚣张了!他竟用Python绕过了“验证码” 在网络世界里你不知道 ...
- 标准C语言(13)
函数指针可以作为形式参数使用,会作为实际参数使用的函数叫回调函数 /* * 回调函数演示 * */ #include <stdio.h> void print_cb(int *p_num) ...
- button 文字图片上下/左右经常会用到,记录一下
上下: self.button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;//使图片和文字水平 ...
- 高性能mysql 第4章 Schema与数据类型优化
基本原则: 更小的通常更好:占用更少的磁盘 内存和cpu缓存.如varchar(2)和varchar(100). 简单就好:比如整形比字符型代价更低.使用日期型来存储日期而不是字符串.使用整形存储ip ...
- LOJ-6285-数列分块入门9
链接: https://loj.ac/problem/6285 题意: 给出一个长为 的数列,以及 个操作,操作涉及询问区间的最小众数. 思路: vector维护每个值的出现位置, 预处理第i快到第j ...
- qt5--数据类型转换
QString-->Char* str.toUtf8().data() pointf=QPointF(point); //将QPoint转换为QPointF point ...
- sqlite3创建自增主键,以及清空表使自增列归零
1.创建自增主键 CREATE TABLE tb_python (ID INTEGER PRIMARY KEY AUTOINCREMENT,TITLE TEXT,URL TEXT); 2.清空表 SQ ...
- jquery enabled选择器 语法
jquery enabled选择器 语法 作用::enabled 选择器选取所有启用的表单元素.大理石平台精度等级 语法:$(":enabled") jquery enabled选 ...
- CF D. Number Of Permutations 排列
挺水的一道题~ 拿全排列随便乘一下就好了. #include <cstdio> #include <algorithm> #define N 300004 #define ll ...
- #415 Div2 Problem C Do you want a data? (math && 前后缀和 && 快速幂)
题意: 首先定义集合的F值为 这个集合里面最大值和最小值的差. 现给出一个拥有n个数的集合(没有相同的元素), 要求求出这个集合内所有子集的F的值的和.例如: {4.7}这个集合里面有子集{4}.{ ...