问题标签 [jsr310]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
144 浏览

java - JSR310 如何将月日模式国际化?

我试图格式化没有年份的日期(只是日期和月份,例如12.10

DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)对我来说仍然是一年(12.10.20)。

所以我尝试DateTimeFormatter.ofPattern("dd. MM")了,但这显然对order 和 dot 进行了硬编码,这不会让美国用户满意。(谁期望斜线和月份优先)

如何使模式国际化?分隔符等是否有一些抽象语法?

0 投票
1 回答
375 浏览

oracle - 使用 Types.TIME 将 java.time.LocalTime 持久化到 oracle 中会丢失小数秒精度

我对 Oracle 有一种行为,我不确定是否有意。

我正在使用各种类型的 java 日期/时间 API,在 JDBC 级别使用它们。

我正在尝试将 java.time.LocalTime 的实例持久保存到 oracle 数据库中。

在 JDBC 级别,我的理解是我应该使用:

  • 符合 JDBC 4.2 的驱动程序
  • PreparedStatement.setObject(int parameterIndex, Object x, int targetSqlType)
  • Types.TIME 作为 java.time.LocalTime 实例的 targetSqlType

由于 oracle 不提供 TIME 类型,我使用 TIMESTAMP 字段。

问题是如果我在 JDBC 级别使用 Types.TIME,我会失去小数秒精度。

如果我使用 Types.TIMESTAMP,精度保持不变。

如果可能的话,我想对 LocalTime 使用 JDBC 预期的标准映射。

这里是显示行为的测试:

Types.TIMESTAMP 测试工作正常。

Types.TIME 测试有以下错误:

这是一个 spring-boot 测试(DataSource 和 JdbcTemplate 由 spring 提供)。我没有详细说明所有的 spring 样板代码,这似乎与问题无关;但如果需要,我会添加它。

我的 FOO 表如下所示:

我正在使用以下 Oracle 映像:https ://hub.docker.com/r/wnameless/oracle-xe-11g-r2

以及以下驱动程序(maven 坐标):com.oracle.database.jdbc:ojdbc10:19.3.0.0

所以我想我的问题有两个:

  • 我是否正确假设 LocalTime 的预期标准 JDBC 映射是: ps.setObject(1, localTime, Types.TIME) ?如果不是,那么预期的 JDBC 方式是什么?
  • Oracle 行为是有意的吗?如果是,它是否记录在某处?

另外,这是我的第一个 SO 问题,欢迎提供任何反馈。

快乐编码!

0 投票
2 回答
100 浏览

java - JSR310 Year.parse() 抛出 DateTimeParseException 值 < 1000

我正在尝试使用 解析 0 到 1000 范围内的年份字符串值java.time.Year.parse(),但是解析失败并使用java.time.format.DateTimeParseException: Text '999' could not be parsed at index 0.

状态的javadoc Year.parse

重现此问题的示例测试:

达到年份时,测试会引发异常999

我究竟做错了什么?

0 投票
0 回答
186 浏览

android - Jackson LocalDate 反序列化错误仅在 release-APK

我有一个 Android 应用程序,它通过 JSON Api 接收数据。然后我使用 Jackson ObjectMapper 转换数据。我还包含com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0在我的 build.gradle 中以确保正确处理 LocalDates。

重要提示:只要我通过 Android-Studio(通过 RUN 或 DEBUG)运行应用程序,一切都会按预期工作。

但是,如果我在发布模式下生成一个签名的 APK 并在电话上手动安装它,杰克逊会抱怨 LocalDate 类缺少构造函数。它的行为好像 datatype-jsr310 中的附加时间反序列化器没有包含在 Build 中?!

我也在调试模式下启用了proguard(正是为了测试这种东西)。还分析 APK 表明包含 jsr310 类。

这是我的gradle构建部分:

我还尝试将 Proguard 配置为忽略杰克逊:

运行发布 apk 的 LogCat 中的 Stacktrace:

DTO 是一个带有日期列表的简单类:


最后的问题

发布版本与调试版本有何不同。
Proguard 缩小似乎并非如此,因为课程可用?!
这可能是与proguard相关的其他东西吗?
任何帮助或提示表示赞赏!

0 投票
2 回答
195 浏览

java - 查找下一次出现的时间,例如 TemporalAdjuster

JSR-310 中是否有任何内容可用于查找给定时间的下一次出现?我真的在寻找与这个问题相同的东西,但时间而不是几天。

例如,从 2020 年 9 月 17 日 06:30 UTC 开始,我想找到下一个 05:30:

在上面,我想nextTime代表 2020-09-18 世界标准时间 05:30,即第二天早上 05:30。

为了澄清我的期望,所有时间都是 05:30:

0 投票
1 回答
153 浏览

java - java.time.Period.between() 在处理不同长度的月份时使用的算法?

在不同长度的月份中使用时java.time.Period.between(),为什么下面的代码会根据操作的方向报告不同的结果?

实时复制:https ://repl.it/@JustinGrant/BigScornfulQueryplan#Main.java

这是我希望它工作的方式:

2019-01-30 => 2019-03-29

  1. 2019-01-30 加一个月 => 2019-02-30,限制为 2019-02-28
  2. 加 29 天到 2019-03-29

这与 Java 的结果相匹配:P1M29D

(反向)2019-03-29 => 2019-01-30

  1. 从 2019-03-29 减去一个月 => 2019-02-29,限制为 2019-02-28
  2. 减去 29 天得到 2019-01-30

但是 Java 又回到P-1M-30D了这里。我预计P-1M-29D

参考文档说:

周期的计算方法是删除完整的月份,然后计算剩余的天数,调整以确保两者具有相同的符号。然后根据 12 个月的年份将月数拆分为年和月。如果月份的结束日期大于或等于月份的开始日期,则考虑一个月。例如,从2010-01-152011-03-18是一年两个月零三天。

也许我没有仔细阅读这篇文章,但我认为这篇文章并不能完全解释我所看到的不同行为。

我对java.time.Period.between应该如何工作有什么误解?具体来说,当“删除完整月份”的中间结果是无效日期时,预计会发生什么?

该算法是否在其他地方更详细地记录?

0 投票
3 回答
206 浏览

java - 如何实现 Java 8 LocalTimeDeserializer?

我一直在寻找使用杰克逊 API 的 LocalTimeDeserializer 类实现自定义反序列化器。

但是,在使用此类实际反序列化属性时,我遇到了错误。

com.fasterxml.jackson.databind.JsonMappingException:类 com.dspim.api.common.LocalTimeWithStringDeserializer 没有默认(无 arg)构造函数

我正在使用下面的自定义实现在 bean 类中进行反序列化。

@JsonProperty @JsonDeserializer(using=LocalTimeWithStringDeserializer.class) private LocalTime packaging_time; //它将保持时间值,即 13:24 (01:24 PM)。

我已经实现了反序列化器类,如下所示。

父类中的默认构造函数(不带参数)是私有的,因此当我收到编译时错误时,我无法将默认构造函数(不带参数)添加到我的类实现中。

请为此问题提出解决方案。

请注意:我有两个不同的客户端项目(相互依赖添加到类路径中),由于依赖版本冲突,我无法使用内置的 Jackson 反序列化器,这就是我被迫使用自定义反序列化器的原因。

0 投票
1 回答
406 浏览

jackson - 如何在 Ktor 中配置 jackson-modules-java8

我正在尝试jackson-modules-java8使用 Ktor 和 Jackson 进行配置,但无济于事。

该模块被添加到gradle.build

根据杰克逊文档,我应该这样做:

但在 Ktor 我只能这样做:

0 投票
1 回答
177 浏览

java - 如何限制杰克逊在json请求中将millis解析为LocalDate

我需要验证 json 请求中的 LocalDate 字段。我想要的是防止将数字反序列化为本地日期的 miilis。这是示例:

我有一个实体:

Jackson2ObjectMapperBuilder 配置:

现在,如果我收到:

结果是birthDate=1970-01-02

我可以通过设置leniency为 false 来做到这一点:

然后它通过投掷来工作MismatchedInputException

但是我们的服务的向后兼容性有点残酷,因为我们需要将所有日期模式从“yyyy-MM-dd”更改为“uuuu-MM-dd”,我想知道是否有一些解决方案可以说杰克逊“如果你在反序列化时看到数字或任何与模式不同的东西,抛出异常”

0 投票
3 回答
710 浏览

java - LocalDate:等于与 isEqual

LocalDate在 Java 中有两个类似的方法equalsisEqual.

他们之间有什么区别?当他们输出不同的结果时?