使用LocalDate,LocalTime和LocalDateTime

Java 8对日期和时间API进行了重大更改,这是在JSR 310:日期和时间API的 JDK中包括了Joda Time API 。 此JSR由Joda Time的创建者Stephen Colebourne领导。

有许多惊人的API可用于日期和时间。 在本文中,我将介绍最常用的: java.time.LocalDatejava.time.LocalTimejava.time.LocalDateTime 。 这些代表独立于时区的日期和时间值。 因此,它们依靠系统时钟来捕获值。

创建一个实例

让我们来看看使用创建它们的实例的方式now()方法和工厂方法of()

jshell> LocalDate.now()
$46 ==> 2018-07-07jshell> LocalDate.of(2018, 3, 30)
$47 ==> 2018-03-30jshell> LocalTime.now()
$48 ==> 00:32:06.883656jshell> LocalTime.of(12,43,12,33333);
$49 ==> 12:43:12.000033333jshell> LocalDateTime.now()
$50 ==> 2018-07-07T00:32:30.335562400jshell> LocalDateTime.of(2018, 12, 30, 12,33)
$51 ==> 2018-12-30T12:33jshell> LocalDateTime.of(LocalDate.now(), LocalTime.now())
$52 ==> 2018-07-07T00:40:38.198318200

处理日期和时间

让我们看一下如何操作或修改创建的日期和时间实例:

jshell> LocalDate d = LocalDate.now()
d ==> 2018-07-07jshell> d.plusDays(12)
$54 ==> 2018-07-19jshell> d
d ==> 2018-07-07jshell> d.plusMonths(2)
$56 ==> 2018-09-07jshell> d.minusDays(5)
$57 ==> 2018-07-02jshell> d.minusWeeks(4)
$58 ==> 2018-06-09

这些plus*()minus*()方法是不可变的,并返回一个新的日期和时间实例。 在上面的示例中,我们看到了几种方法来操纵java.time.LocalDate的组件。 在类似的行上,有plus*()minus*()方法用于处理java.time.LocalTimejava.time.LocalDateTime的组件。

比较日期和时间实例

我们想知道给定的日期和时间是在另一个日期之前还是之后,在这种情况下,我们将使用isBefore()isAfter()方法,如下所示:

jshell> var d1 = LocalDate.of(2018, 7, 6)
d1 ==> 2018-07-06jshell> var d2 = LocalDate.of(2018, 7, 7)
d2 ==> 2018-07-07jshell> d1.isAfter(d2)
$64 ==> falsejshell> d1.isBefore(d2)
$65 ==> truejshell> var dt1 = LocalDateTime.of(2018, 7, 7, 12, 30)
dt1 ==> 2018-07-07T12:30jshell> var dt2 = LocalDateTime.of(2018, 7, 7, 14, 30)
dt2 ==> 2018-07-07T14:30jshell> dt1.isBefore(dt2)
$68 ==> truejshell> dt1.isAfter(dt2)
$69 ==> false

在字符串和日期对象表示之间转换

通常,我们需要将日期和时间的String表示形式转换为其相应的对象,并且还将该对象转换为String表示形式。 对于较旧的日期类java.util.Date我们使用java.text.SimpleDateFormat解析字符串为日期,反之亦然。 在新的日期时间API中,为同一任务引入了新类java.time.format.DateTimeFormatter

如果遵循在字符串和对象表示形式之间转换日期的ISO标准,由于java.time.format.DateTimeFormatter提供了预定义的ISO格式,因此图层和应用程序之间的许多集成将变得无缝。 让我们看一下实际情况:

jshell> import java.time.*jshell> LocalDateTime ldt = LocalDateTime.now()
ldt ==> 2018-09-26T22:58:32.229096300jshell> import java.time.format.*jshell> ldt.format(DateTimeFormatter.ISO_DATE)
$4 ==> "2018-09-26"jshell> ldt.format(DateTimeFormatter.ISO_DATE_TIME)
$5 ==> "2018-09-26T22:58:32.2290963"jshell> ldt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
$9 ==> "2018-09-26T22:58:32.2290963"jshell> ldt.format(DateTimeFormatter.BASIC_ISO_DATE)
$10 ==> "20180926"

我们甚至可以使用自定义格式设置模式,如下所示:

jshell> ldt.format(DateTimeFormatter.ofPattern("d-M-y"));
$11 ==> "26-9-2018"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MM-y hh:mm:ss"));
$12 ==> "26-09-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d/MMM/y hh:mm:ss"));
$13 ==> "26/Sep/2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y hh:mm:ss"));
$14 ==> "26-Sep-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y hh:mm:ss"));
$15 ==> "26-Sep-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y HH:mm:ss"));
$16 ==> "26-Sep-2018 22:58:32"

可以在Javadoc中的java.time.format.DateTimeFormatter找到用于创建模式的不同规则。

让我们看一下将日期和时间的有效String表示形式转换为LocalDateTime及其相关对象:

<br />jshell> LocalDate ld = LocalDate.parse("2018-09-26")
ld ==> 2018-09-26jshell> LocalDateTime ldt = LocalDateTime.parse("2018-09-26T22:24:33")
ldt ==> 2018-09-26T22:24:33

您可以看到,在上面的代码中,我们没有提供用于解析字符串的模式,而是使用了默认的ISO格式。 通过API交换日期和时间值时,此方法非常有用。

这样,我展示了一些基本的操作,您可以使用与时区无关的新日期和时间实例进行操作。 在接下来的文章中,我将写有关时区的时间,查找持续时间,时间和日期之间的时间段以及如何使用不同的日历系统。

翻译自: https://www.javacodegeeks.com/2018/10/localdate-localtime-localdatetime.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

visual studio odbc数据源设计器_NEW!WinForm界面开发设计时正式支持.NET 5

点击“了解更多”获取DevExpress v20.2完整版下载早在今年7月&#xff0c;官方技术团队宣布对DevExpress控件进行功能增强&#xff0c;使其支持最新的.NET 5 Preview。 但是尽管技术团队一直在努力确保WinForms控件与.NET 5兼容但在Visual Studio中对设计器的支持却是另一回事。…

java 接口的观察者模式_java观察者模式

观察者模式又叫做发布-订阅(Publish/Subscribe)模式。观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自己更新自己。Observer结构图.pngSubj…

java 构建者模式_Java方法中的参数太多,第3部分:构建器模式

java 构建者模式在我的前两篇文章中&#xff0c;我研究了如何通过自定义类型和参数对象减少构造函数或方法调用所需的参数数量。 在本文中&#xff0c;我将讨论如何使用构建器模式来减少构造器所需的参数数量&#xff0c;并讨论该模式如何甚至可以帮助采用过多参数的非构造器方…

webgis从基础到开发实践_ArcGIS API For Javascript 开发笔记(四)

二、应用篇1、应用部署部署也就意味着一个 DEMO 或者系统即将完工&#xff0c;也意味着系统即将上线&#xff0c;相对来说Javascript 应用的部署不是很复杂&#xff0c;但是这是有前提的&#xff0c;要对部署中的一些概念有所了解&#xff0c;比如部署中常常提到的虚拟目录&…

Spock 1.2 –轻松进行集成测试中的Spring Bean模拟

探索如何使用Spock 1.2将Spock的模拟和间谍自动注入到Spring上下文中。 Spock中的存根/模拟/间谍&#xff08;及其生命周期&#xff09;一直与Spock Specification类紧密结合。 只能在测试类中创建它们。 因此&#xff0c;使用共享的预定义模拟&#xff08;在单元测试和集成测…

geteditor p 取消自动_2020百度网盘超级会员怎么取消自动续费?

首先我们打开百度网盘&#xff0c;开通超级会员以后&#xff0c;可以看到个人中心有一个管理自动续费的&#xff0c;点击打开。2然后可以看到自己开通的界面旁边显示的有一个取消按钮。3点击取消以后&#xff0c;会提示我们自动续费享受的有优惠&#xff0c;我们继续点击确认取…

java堆和客栈_java中堆和栈的区别分析

堆和栈是java数据结构里非常重要的概念&#xff0c;本文较为详细的分析了二者之间的区别。供大家参考。具体如下&#xff1a;Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarr栈的优势是&#xff0c;存取速度比堆要快&a…

php odbc驱动,用于Windows的PHP 7.0 ODBC驱动程序

我将PHP 5.6.30(https://www.apachefriends.org/de/download.html)升级到PHP 7.0(https://bitnami.com/stack/wamp/installer)到目前为止,一切都运行良好,当我使用MySQL数据库时,它将我的页面的加载时间从1,2秒减少到约300毫秒.但是现在我正在尝试使用以下简单脚本连接到MSSQL数…

分布式机器学习_229页,CMU博士张昊毕业论文公布,探索机器学习并行化的奥秘...

CMU 机器人研究所张昊&#xff08;Hao Zhang&#xff09;博士论文新鲜出炉&#xff0c;主要围绕着机器学习并行化的自适应、可组合与自动化问题展开。机器之心报道&#xff0c;机器之心编辑部。随着近年来&#xff0c;机器学习领域的创新不断加速&#xff0c;SysML 的研究者已经…

利用Excel或LibreOffice的业务输入进行单元测试约束

业务专家向我们&#xff08;开发人员&#xff09;解释业务限制。 但是&#xff0c;如何确保我们正确理解它们呢&#xff1f; 或更糟糕的是&#xff0c;一旦约束条件正式化&#xff0c;我们如何测试他们之间是否同意&#xff1f; 好吧&#xff0c;有一种很棒的方法可以做到这一…

Java播放歌词同步源码,Android 实现歌词同步

歌词同步的原理其实很简单&#xff1a;歌词显示是一个线程&#xff0c; 音乐播放时一个线程&#xff0c;通过播放时间将歌词显示进度与播放进度同步起来。网络标准的歌词格式是LRC。 我们看下一个LRC文档&#xff0c;其格式就一目了然了。[ti&#xff1a;爱][ar&#xff1a;小虎…

矩阵连乘 动态规划_Java动态规划

1. 介绍动态规划典型的被用于优化递归算法&#xff0c;因为它们倾向于以指数的方式进行扩展。动态规划主要思想是将复杂问题(带有许多递归调用)分解为更小的子问题&#xff0c;然后将它们保存到内存中&#xff0c;这样我们就不必在每次使用它们时重新计算它们。要理解动态规划的…

c php乱码,php分割GBK中文乱码的解决方法

类似如下的字符串(GBK), explode不能得到正确结果:$result explode("|", "滕华弢|海青");究其原因, 对于”弢”字(读tao,不认识没关系,我也不认识), 因为他的GBK编码值为: 8f7c, 不巧的是, “|”的ASCII值也是7c.还有一些类似的问题: 因为GBK编码的编码范…

分布式光伏补贴_光伏发电上网电价政策综述

原标题&#xff1a;光伏发电上网电价政策综述近些年&#xff0c;光伏发电上网电价相关政策不断推陈出新&#xff0c;在推进平价上网的同时&#xff0c;也积极对接了电力市场建设需要。本文梳理了光伏发电上网电价及补贴标准有关政策&#xff0c;供参考使用&#xff1a;1.普通光…

怎么简单的锁定文件夹_简单性与鲁棒性–在锁定文件处理中展示

怎么简单的锁定文件夹今天&#xff0c;我们将讨论使事情保持简单&#xff0c;愚蠢&#xff08;KISS&#xff09;和鲁棒性的设计价值之间&#xff0c;设计不足和过度设计之间的冲突。 我们正在编写一个批处理Java应用程序&#xff0c;需要确保在服务器上一次最多运行一个实例。…

php strlen 线程安全,浅析PHP中strlen和mb_strlen的区别

在PHP中&#xff0c;strlen与mb_strlen是求字符串长度的函数&#xff0c;但是对于一些初学者来说&#xff0c;如果不看手册&#xff0c;也许不太清楚其中的区别。下面通过例子&#xff0c;讲解这两者之间的区别。先看例子&#xff1a;//测试时文件的编码方式要是UTF8$str中文a字…

单片机float数发给上位机_上位机倒计时器

1. 设置窗口在VS2019新建一个Windows窗体应用(.NET Framework)项目&#xff0c;新建之后出现一个可视化页面(From1.cs[设计])设置窗口。在左侧的工具箱里面拉拽控件到操作面板上&#xff0c;按照自己的喜好摆放位置和调大小。这里要注意的是用到的分别是什么控件&#xff1a;文…

JDK语言功能预览:切换表达式

JEP 12 [“预览语言和VM功能”]在其主页上描述如下&#xff1a; 预览语言或VM功能是Java SE平台的一项新功能&#xff0c;该功能已完全指定&#xff0c;完全实现但不是永久性的。 JDK功能发布中提供了该功能&#xff0c;以根据实际使用情况激发开发人员反馈。 这可能会导致它在…

python快速示例_Python编程入门-基本示例,快速,上,手,基础

环境配置安装Python&#xff0c;目前最新的是3.9(不支持Windows7)&#xff0c;我装的3.7https://www.python.org/downloads/安装向导里勾选自动添加路径&#xff0c;装完就可以用&#xff0c;Windows10/7搜索框输入IDLE&#xff0c;进入交互式环境窗口&#xff0c;输入语句后&a…

php 距离排序,php 附近由近到远排序查询

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//获取经纬度 默认值为0.5千米function returnSquarePoint($lng, $lat, $distance 0.5){define(EARTH_RADIUS, 6371); //地球半径&#xff0c;平均半径为6371km$dlng 2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2ra…