栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java 8 java.time:在Instant vs LocalDateTime中添加TemporalUnit

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 8 java.time:在Instant vs LocalDateTime中添加TemporalUnit

我将继续根据最终解决方案以及很长的评论链的摘要发布答案。

首先,整个转换链如下:

Date --> Instant --> LocalDateTime --> Do stuff --> Instant --> Date

必须保留时区信息,并且仍要对类似Date的对象执行操作,该对象知道Calendar及其中的所有上下文。否则,我们将存在隐式转换为本地时区的风险,如果尝试将其转换为人类可读的日期格式,则时间可能因此而发生了变化。

例如,该类

toLocalDateTime()
上的方法
java.sql.Timestamp
隐式转换为默认时区。就我的目的而言,这是不可取的,但不一定是不良行为。但是,重要的是要意识到这一点。这就是直接从旧版Java日期对象转换为
LocalDateTime
对象的问题。由于传统对象通常被假定为UTC,因此转换使用本地时区偏移量。

现在,假设我们的程序接受的输入

2014-04-16T13:00:00
并以形式保存到数据库
java.sql.Timestamp

//Parse string into local date. LocalDateTime has no timezone componentLocalDateTime time = LocalDateTime.parse("2014-04-16T13:00:00");//Convert to Instant with no time zone offsetInstant instant = time.atZone(ZoneOffset.ofHours(0)).toInstant();//Easy conversion from Instant to the java.sql.Timestamp objectTimestamp timestamp = Timestamp.from(instant);

现在我们加上一个时间戳,并增加一些天数:

Timestamp timestamp = ...//Convert to LocalDateTime. Use no offset for timezoneLocalDateTime time = LocalDateTime.ofInstant(timestamp.toInstant(), ZoneOffset.ofHours(0));//Add time. In this case, add one day.time = time.plus(1, ChronoUnit.DAYS);//Convert back to instant, again, no time zone offset.Instant output = time.atZone(ZoneOffset.ofHours(0)).toInstant();Timestamp savedTimestamp = Timestamp.from(output);

现在,我们只需要输出格式为的可读字符串即可

ISO_LOCAL_DATE_TIME

Timestamp timestamp = ....LocalDateTime time = LocalDateTime.ofInstant(timestamp.toInstant(), ZoneOffset.ofHours(0));String formatted = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(time);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419764.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号