Java8 Date API
一 、Clock 时钟
Clock类提供了访问当前日期和时间的方法,Clock是时区敏感的,可以用来取代 System.currentTimeMillis() 来获取当前的微秒数。某一个特定的时间点也可以使用Instant类来表示,Instant类也可以用来创建老的java.util.Date对象。
import java.time.Clock;
import java.time.Instant;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Clock clock = Clock.systemDefaultZone();
long millis = clock.millis();
Instant instant = clock.instant();
Date from = Date.from(instant);
System.out.println("millis :" + millis);
System.out.println("from :" + from);
}
}
二、Timezones 时区
import java.time.ZoneId;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
System.out.println(availableZoneIds);
ZoneId of = ZoneId.of("Asia/Shanghai");
ZoneId of1 = ZoneId.of("Asia/Aden");
System.out.println(of.getRules());
System.out.println(of1.getRules());
}
}
三、LocalTime 本地时间
1、可以通过静态工厂方法of创建一个LocalDate实例
2、同过方法parse 解析时间
3、操作方式和LocalDate类似
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.ChronoUnit;
import java.util.Locale;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
System.out.println(availableZoneIds);
//获取当前时间
ZoneId zoneId = ZoneId.of("Asia/Shanghai");
LocalTime localTimeOld = LocalTime.now(zoneId);
System.out.println("localTime :"+localTimeOld);
//获取定时时间及时、分、秒
LocalTime localTime = LocalTime.of(12, 25, 55);
int hour = localTime.getHour();
int minute = localTime.getMinute();
int second = localTime.getSecond();
System.out.println("localTime "+localTime+"\nhour :"+hour + "\nminute :" + minute + "second :"+second);
//获取两个时间时间差(时间小的第一个参数结果是负数)
long hoursBetween = ChronoUnit.HOURS.between(localTimeOld, localTime);
long minutesBetween = ChronoUnit.MINUTES.between(localTimeOld, localTime);
System.out.println("hoursBetween :"+hoursBetween);
System.out.println("minutesBetween :"+minutesBetween);
//多种工厂方法简化对象创建,包括字符串的解析
DateTimeFormatter germanFormatter =
DateTimeFormatter
.ofLocalizedTime(FormatStyle.SHORT)
.withLocale(Locale.GERMAN);
LocalTime parse = LocalTime.parse("12:25", germanFormatter);
System.out.println("parse :"+parse);
}
}
四、LocalDate 本地日期
LocalDate 表示了一个确切的日期,该对象值是不可变的,用起来和LocalTime基本一致。另外要注意的是这些对象是不可变的,操作返回的总是一个新实例。
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.ChronoUnit;
import java.util.Locale;
public class Test {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS);
LocalDate yesterday = tomorrow.minusDays(2);
System.out.println(yesterday);
LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);
DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
System.out.println(dayOfWeek);
DateTimeFormatter germanFormatter = DateTimeFormatter
.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(Locale.GERMAN);
LocalDate xmas = LocalDate.parse("01.11.2019", germanFormatter);
System.out.println(xmas);
}
}
五、 LocalDateTime 本地时间日期
1、LocalDateTime,是LocalDate和LocalTime的合体。它同时表示了日期和时间,但不带有时区信息,可以直接创建,也可以通过合并日期和时间对象构造。
2、LocalDateTime和LocalTime还有LocalDate一样,都是不可变的。LocalDateTime提供了一些能访问具体字段的方法。
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.temporal.ChronoField;
public class Test {
public static void main(String[] args) {
LocalDateTime sylvester = LocalDateTime.of(2019, Month.DECEMBER, 31, 23, 59, 59);
DayOfWeek dayOfWeek = sylvester.getDayOfWeek();
System.out.println(dayOfWeek);
Month month = sylvester.getMonth();
System.out.println(month);
long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY);
System.out.println(minuteOfDay);
}
}
六、Instant
从计算机的角度来看,建模时间最自然的格式是表示一个持续时间段上某个点的单一大整型数, Instant的设计初衷是为了便于机器使用,它包含的是由秒及纳秒所构成的数字。Instant类也支持静态工厂方法now,它能够帮你获取当前时刻的时间戳。
import java.time.Instant;
public class Test {
public static void main(String[] args) {
Instant now = Instant.now();
System.out.println(now.getEpochSecond() + "." + now.getNano());
System.out.println(System.currentTimeMillis());
}
}
七、时间类的通用方法
- LocalDate、 LocalTime、 LocalDateTime以及Instant这样表示时间点的日期时间类提供了大量通用的方法。
| 方法名 | 是否是静态方法 | 描述 |
|---|---|---|
| form | 是 | 根据传入的Temporal对象创建对象实例 |
| now | 是 | 根据系统时钟创建Temporal对象 |
| of | 是 | 由Temporal对象的某个部分创建该对象的实例 |
| parse | 是 | 由字符串创建Temporal对象的实例 |
| atOffset | 否 | 将Temporal对象和某个时区偏移相结合 |
| atZone | 否 | 将Temporal对象和某个时区相结合 |
| format | 否 | 使用某个指定的格式器将Temporal对象转化为字符串(Instant 类不提供该方法) |
| get | 否 | 读取Temporal对象某一个部分的值 |
| minus | 否 | 创建Temporal对象的一个副本,通过将当前Temporal对象的值减去一定的时长创建该副本 |
| plus | 否 | 创建Temporal对象的一个副本,通过将当前Temporal对象的值加上一定的时长创建该副本 |
| with | 否 | 以该Temporal对象对象为模板,对某些状态进行修改创建该对象的副本 |
八、格式化
DateTimeFormatter通常用来格式化日期和时间,里面预定义了像BASIC_ISO_DATE和ISO_LOCAL_DATE这样的常量方便格式化。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Test {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
String s = now.format(DateTimeFormatter.BASIC_ISO_DATE);
String s1 = now.format(DateTimeFormatter.ISO_DATE_TIME);
System.out.println(s);
System.out.println(s1);
}
}
本文作者:[魂皓轩][1] 欢迎关注公众号

本人保留所有权益,转载请注明出处。
欢迎有故事、有想法的朋友和我分享,可发送至 e-mail: lwqforit@163.com
[1]: 1 "文章编辑专用,同步微信公众号,微信,博客园,知乎,微博,思否(segmentfault),掘金,QQ
Java8 Date API的更多相关文章
- 乐字节-Java8新特性之Date API
上一篇文章,小乐给大家带来了Java8新特性之Optional,接下来本文将会给大家介绍Java8新特性之Date API 前言: Java 8通过发布新的Date-Time API来进一步加强对日期 ...
- Java8 Time API与老Date之间的转换
前面我已经总结了Java8 Time API常用的一些方法.封装的工具类,可是最近需要对一个比较老的项目进行重构,大致看了一下使用的Jdk还是7而且里面的时间工具类还是使用的Date和Calendar ...
- java8 异步api、循环、日期
java8 异步api.循环.日期 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/10801470.html 异步api 对于多任务耗时的业务场景,一般我们会用 ...
- Java8 日期 API 业务使用
最近在做账单结算业务,需要根据客户选择的结算方式来推算下一次结算日期以及该次结算日期段. 推算日期这样的业务直男君以前就写过,只不过使用的是熟悉的 java.util.date 和 java.util ...
- New Date API介绍
一.新的Date API介绍 LocalDateLocalTimeInstantDurationPeriod formatterparsejdk以前的java.util.Date存在的问题 1)比如n ...
- 011-jdk1.8版本新特性三-Date API
1.7.Date API Java 8 在包java.time下包含了一组全新的时间日期API.新的日期API和开源的Joda-Time库差不多,但又不完全一样,下面的例子展示了这组新API里最重要的 ...
- Java8 新API读取文件内容
import java.io.IOException;import java.nio.charset.Charset;import java.nio.file.Files;import java.ni ...
- 如何用Java8 Stream API找到心仪的女朋友
传统的的Java 集合操作是有些啰嗦的,当我们需要对结合元素进行过滤,排序等操作的时候,通常需要写好几行代码以及定义临时变量. 而Java8 Stream API 可以极大简化这一操作,代码行数少,且 ...
- 何用Java8 Stream API进行数据抽取与收集
上一篇中我们通过一个实例看到了Java8 Stream API 相较于传统的的Java 集合操作的简洁与优势,本篇我们依然借助于一个实际的例子来看看Java8 Stream API 如何抽取及收集数据 ...
随机推荐
- HZOJ 老司机的狂欢
比较神仙的一道题. 第一问还比较简单一点: t是否可行是单调的,考虑二分. 考虑对于两个人i,j合法的条件,设x(i)<x(j),那么$x(i)+\frac {a(i)*t^2}{2} < ...
- 通过 PHP OPcache 提升 Laravel 应用运行速度
什么是 OPcache 每一次执行 PHP 脚本的时候,该脚本都需要被编译成字节码,而 OPcache 可以对该字节码进行缓存,这样,下次请求同一个脚本的时候,该脚本就不需要重新编译,这极大节省了脚本 ...
- day15 web前端之css
css的概念以及初体验 概念: CSS(cascading style sheet)也就是层叠样式表:它是一种网页设计的新技术,现在已经被大多数浏览器所支持,层位网页设计必不可少的工具之一.优点: ...
- vue element 给指数的div加loading
const loading = this.$loading({ lock: true, text: 'Loading', spinner: 'el-icon-lo ...
- html实体字符转换成字符串
function EntityToString(value) { let tag = document.createElement("div"); tag.innerHTML = ...
- intellij idea 搜索
. Ctrl+N 按名字搜索类 相当于eclipse的ctrl+shift+R,输入类名可以定位到这个类文件 就像idea在其它的搜索部分的表现一样,搜索类名也能对你所要搜索的内容多个部分进行匹配 甚 ...
- SuperSocket新的配置属性 "defaultCulture"
这个新增的功能只支持 .Net framework 4.5 及其以上版本. 它允许你设置所有线程的默认Culture, 不管这些线程是如何创建,通过代码或者来自于线程池. 这个新的配置属性 " ...
- php三目运算计算三个数最大值最小值
文章地址:https://www.cnblogs.com/sandraryan/ $x = 10; $y = 45; $z = 3; //求出三个数字中最大值最小值 //先比较x y,如果x> ...
- HTML--表格与表单
一.表格 <table></table>表格 width:宽度.可以用像素或百分比表示. 常用960像素. border:边框,常用值为0. cellpadding:内容跟边框 ...
- tp5 thinkphp5 多表关联查询 join查询
model下: $res = \think\Db::name('article') ->alias("a") //取一个别名 ->join('admin ad','a. ...