Java8 日期、时间操作

<div id="cnblogs\_post\_body" class="blogpost-body"><p>一、简介</p> <p>  在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题。故此,Java8引入了一套全新的日期时间处理API,新的API基于ISO标准日历系统。</p> <p>    </p> <p>二、日期初识</p> <p>  示例1: 获取当天日期</p> <p>    Java 8中的 LocalDate 用于表示当天日期。和java.util.Date不同,它只有日期,不包含时间。</p> <div class="cnblogs\_code"> <pre><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) {   LocalDate date </span>=<span style="color: #000000;"> LocalDate.now();   System.out.println(</span>"当前日期=" +<span style="color: #000000;"> date); }</span></pre> </div> <p>&nbsp;</p> <p>  示例2: 构造指定日期</p> <p>    调用工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从0开 始等等</p> <div class="cnblogs\_code"> <pre><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) { LocalDate date </span>= LocalDate.of(2000, 1, 1<span style="color: #000000;">); System.out.println(</span>"千禧年=" +<span style="color: #000000;"> date); }</span></pre> </div> <p>&nbsp;</p> <p>  示例3: 获取年月日信息</p> <div class="cnblogs\_code"> <pre><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) { LocalDate date </span>=<span style="color: #000000;"> LocalDate.now(); System.out.printf(</span>"年=%d, 月=%d, 日=%d"<span style="color: #000000;">, date.getYear(), date.getMonthValue(), date.getDayOfMonth()); }</span></pre> </div> <p>&nbsp;</p> <p>  示例4: 比较两个日期是否相等</p> <div class="cnblogs\_code"> <pre><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) { LocalDate now </span>=<span style="color: #000000;"> LocalDate.now(); LocalDate date </span>= LocalDate.of(2018, 9, 24<span style="color: #000000;">); System.out.println(</span>"日期是否相等=" +<span style="color: #000000;"> now.equals(date)); }</span></pre> </div> <p>&nbsp;</p> <p>三、时间初识</p> <p>  示例: 获取当前时间</p> <p>    Java 8中的 LocalTime 用于表示当天时间。和java.util.Date不同,它只有时间,不包含日期。</p> <div class="cnblogs\_code"> <pre><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) { LocalTime time </span>=<span style="color: #000000;"> LocalTime.now(); System.out.println(</span>"当前时间=" +<span style="color: #000000;"> time); }</span></pre> </div> <p>&nbsp;</p> <p>四、比较与计算</p> <p>  示例1: 日期时间计算</p> <p>    Java8提供了新的plusXxx()方法用于计算日期时间增量值,替代了原来的add()方法。新的API将返回一个全新的日期时间示例,需要使用新的对象进行接收。</p> <div class="cnblogs\_code"><div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) { <br>     // 时间增量 LocalTime time </span>=<span style="color: #000000;"> LocalTime.now(); LocalTime newTime </span>= time.plusHours(2<span style="color: #000000;">); System.out.println(</span>"newTime=" +<span style="color: #000000;"> newTime); <br>     // 日期增量 LocalDate date </span>=<span style="color: #000000;"> LocalDate.now(); LocalDate newDate </span>= date.plus(1<span style="color: #000000;">, ChronoUnit.WEEKS); System.out.println(</span>"newDate=" +<span style="color: #000000;"> newDate);
}</span></pre>
<div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp;</p> <p>  示例2: 日期时间比较</p> <p>    Java8提供了isAfter()、isBefore()用于判断当前日期时间和指定日期时间的比较</p> <div class="cnblogs\_code"><div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) {
LocalDate now </span>=<span style="color: #000000;"> LocalDate.now(); LocalDate date1 </span>= LocalDate.of(2000, 1, 1<span style="color: #000000;">); </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (now.isAfter(date1)) { System.out.println(</span>"千禧年已经过去了"<span style="color: #000000;">); } LocalDate date2 </span>= LocalDate.of(2020, 1, 1<span style="color: #000000;">); </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (now.isBefore(date2)) { System.out.println(</span>"2020年还未到来"<span style="color: #000000;">); } }</span></pre>
<div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp;</p> <p>五、时区</p> <p>  示例: 创建带有时区的日期时间</p> <p>    Java 8不仅分离了日期和时间,也把时区分离出来了。现在有一系列单独的类如ZoneId来处理特定时区,ZoneDateTime类来表示某时区下的时间。</p> <div class="cnblogs\_code"><div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 上海时间</span> ZoneId shanghaiZoneId = ZoneId.of("Asia/Shanghai"<span style="color: #000000;">); ZonedDateTime shanghaiZonedDateTime </span>=<span style="color: #000000;"> ZonedDateTime.now(shanghaiZoneId); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 东京时间</span> ZoneId tokyoZoneId = ZoneId.of("Asia/Tokyo"<span style="color: #000000;">); ZonedDateTime tokyoZonedDateTime </span>=<span style="color: #000000;"> ZonedDateTime.now(tokyoZoneId); DateTimeFormatter formatter </span>= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"<span style="color: #000000;">); System.out.println(</span>"上海时间: " +<span style="color: #000000;"> shanghaiZonedDateTime.format(formatter)); System.out.println(</span>"东京时间: " +<span style="color: #000000;"> tokyoZonedDateTime.format(formatter)); }</span></pre>
<div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp;</p> <p>六、格式化</p> <p>  示例1: 使用预定义格式解析与格式化日期</p> <div class="cnblogs\_code"><div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #0000ff;">  public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 解析日期</span> String dateText = "20180924"<span style="color: #000000;">; LocalDate date </span>=<span style="color: #000000;"> LocalDate.parse(dateText, DateTimeFormatter.BASIC_ISO_DATE); System.out.println(</span>"格式化之后的日期=" +<span style="color: #000000;"> date); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 格式化日期</span> dateText =<span style="color: #000000;"> date.format(DateTimeFormatter.ISO_DATE); System.out.println(</span>"dateText=" +<span style="color: #000000;"> dateText); }</span></pre>
<div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp;</p> <p>  示例2: 日期和字符串的相互转换</p> <div class="cnblogs\_code"><div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String\[\] args) {
DateTimeFormatter formatter </span>= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"<span style="color: #000000;">); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 日期时间转字符串</span> LocalDateTime now =<span style="color: #000000;"> LocalDateTime.now(); String nowText </span>=<span style="color: #000000;"> now.format(formatter); System.out.println(</span>"nowText=" +<span style="color: #000000;"> nowText); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 字符串转日期时间</span> String datetimeText = "1999-12-31 23:59:59"<span style="color: #000000;">; LocalDateTime datetime </span>=<span style="color: #000000;"> LocalDateTime.parse(datetimeText, formatter); System.out.println(datetime); }</span></pre>
<div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp;</p> <p>七、相关类说明</p> <div class="cnblogs\_code"><div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div> <pre><span style="color: #000000;">Instant 时间戳 Duration 持续时间、时间差 LocalDate 只包含日期,比如:</span>2018-09-24<span style="color: #000000;"> LocalTime 只包含时间,比如:</span>10:32:10<span style="color: #000000;"> LocalDateTime 包含日期和时间,比如:</span>2018-09-24 10:32:10<span style="color: #000000;"> Peroid 时间段 ZoneOffset 时区偏移量,比如:</span>+8:00<span style="color: #000000;"> ZonedDateTime 带时区的日期时间 Clock 时钟,可用于获取当前时间戳 java.time.format.DateTimeFormatter 时间格式化类</span></pre> <div class="cnblogs\_code\_toolbar"><span class="cnblogs\_code\_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="https://my.oschina.net//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div> <p>&nbsp;</p>原文地址:https://www.cnblogs.com/ark-blog/p/9694950.html</div>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

HIVE 时间操作函数

日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec