- bounty将于明天过期**。此问题的答案可获得+200声誉奖励。Peter Penzov正在寻找来自声誉良好的来源的答案。
我有以下代码,我想迁移到Java 17:
Gradle依赖关系:
implementation 'org.jadira.usertype:usertype.core:7.0.0.CR1'
实体:
import org.joda.time.DateTime;
@Entity
@Table(name = "logs")
public class Log {
@Column(name = "inserted_date")
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime insertedDate;
}
.....
DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("yy-mm-dd'T'HH:mm:ss'Z'");
log.setInsertedDate(DateTime.now());
dateFormatter.print(log.getInsertedDate().withZone(DateTimeZone.UTC)));
我将代码更新为:
实体:
import java.time.OffsetDateTime;
@Entity
@Table(name = "logs")
public class Log {
@Column(name = "inserted_date")
private OffsetDateTime insertedDate;
}
.....
DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("yy-mm-dd'T'HH:mm:ss'Z'");
log.setInsertedDate(OffsetDateTime.now());
dateFormatter.print(log.getInsertedDate().withZone(DateTimeZone.UTC)));
但是我得到了错误Cannot resolve method 'withZone' in 'OffsetDateTime'
。你知道更新方法withZone
的正确方法吗?
编辑:我尝试过
发件人:log.setTimestamp(dateFormatter.print(auditLog.getInsertedDate().withZone(DateTimeZone.UTC)));
至:log.setTimestamp(dateFormatter.print(auditLog.getInsertedDate().atZoneSameInstant(ZoneOffset.UTC)));
对于这行我得到:auditLog.getInsertedDate().atZoneSameInstant(ZoneOffset.UTC)
错误:Cannot resolve method 'print(ZonedDateTime)'
你能建议如何解决这个问题吗?
1条答案
按热度按时间0yg35tkg1#
首先,看起来你的时间格式不是你想要的。
“yy-mm-dd 'T'HH:mm:ss 'Z'”表示打印以下内容的格式:
例如:23-48-19T14:48:17 Z
我假设你想跟在年和月份后面,那么格式应该是:
“年-月-日时:分:秒”
例如:23-02-19T14:48:17 Z
要了解有关构造格式化模式的更多信息,请参阅java time api docs中的**“格式化和解析模式”**一节
现在,回到你的问题,
你好像把joda time library和java date time api混在一起了,完全用java日期时间API编写,你的代码应该看起来像这样:
PS:我知道在Java中使用日期时间对象会让人沮丧和困惑,特别是因为过去有不止一种方法可以做到这一点。我建议阅读java date time api tutorials以获得更好的理解,并始终使用它(当用java 8+编写时)以避免困惑。