问题标签 [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.
java - JSR310 如何将月日模式国际化?
我试图格式化没有年份的日期(只是日期和月份,例如12.10)
DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
对我来说仍然是一年(12.10.20)。
所以我尝试DateTimeFormatter.ofPattern("dd. MM")
了,但这显然对order 和 dot 进行了硬编码,这不会让美国用户满意。(谁期望斜线和月份优先)
如何使模式国际化?分隔符等是否有一些抽象语法?
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 问题,欢迎提供任何反馈。
快乐编码!
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
:
我究竟做错了什么?
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相关的其他东西吗?
任何帮助或提示表示赞赏!
java - 查找下一次出现的时间,例如 TemporalAdjuster
JSR-310 中是否有任何内容可用于查找给定时间的下一次出现?我真的在寻找与这个问题相同的东西,但时间而不是几天。
例如,从 2020 年 9 月 17 日 06:30 UTC 开始,我想找到下一个 05:30:
在上面,我想nextTime
代表 2020-09-18 世界标准时间 05:30,即第二天早上 05:30。
为了澄清我的期望,所有时间都是 05:30:
java - java.time.Period.between() 在处理不同长度的月份时使用的算法?
在不同长度的月份中使用时java.time.Period.between()
,为什么下面的代码会根据操作的方向报告不同的结果?
实时复制:https ://repl.it/@JustinGrant/BigScornfulQueryplan#Main.java
这是我希望它工作的方式:
2019-01-30 => 2019-03-29
- 2019-01-30 加一个月 => 2019-02-30,限制为 2019-02-28
- 加 29 天到 2019-03-29
这与 Java 的结果相匹配:P1M29D
(反向)2019-03-29 => 2019-01-30
- 从 2019-03-29 减去一个月 => 2019-02-29,限制为 2019-02-28
- 减去 29 天得到 2019-01-30
但是 Java 又回到P-1M-30D
了这里。我预计P-1M-29D
。
参考文档说:
周期的计算方法是删除完整的月份,然后计算剩余的天数,调整以确保两者具有相同的符号。然后根据 12 个月的年份将月数拆分为年和月。如果月份的结束日期大于或等于月份的开始日期,则考虑一个月。例如,从
2010-01-15
到2011-03-18
是一年两个月零三天。
也许我没有仔细阅读这篇文章,但我认为这篇文章并不能完全解释我所看到的不同行为。
我对java.time.Period.between
应该如何工作有什么误解?具体来说,当“删除完整月份”的中间结果是无效日期时,预计会发生什么?
该算法是否在其他地方更详细地记录?
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 反序列化器,这就是我被迫使用自定义反序列化器的原因。
jackson - 如何在 Ktor 中配置 jackson-modules-java8
我正在尝试jackson-modules-java8
使用 Ktor 和 Jackson 进行配置,但无济于事。
该模块被添加到gradle.build
根据杰克逊文档,我应该这样做:
但在 Ktor 我只能这样做:
java - 如何限制杰克逊在json请求中将millis解析为LocalDate
我需要验证 json 请求中的 LocalDate 字段。我想要的是防止将数字反序列化为本地日期的 miilis。这是示例:
我有一个实体:
Jackson2ObjectMapperBuilder 配置:
现在,如果我收到:
结果是birthDate=1970-01-02
我可以通过设置leniency
为 false 来做到这一点:
然后它通过投掷来工作MismatchedInputException
但是我们的服务的向后兼容性有点残酷,因为我们需要将所有日期模式从“yyyy-MM-dd”更改为“uuuu-MM-dd”,我想知道是否有一些解决方案可以说杰克逊“如果你在反序列化时看到数字或任何与模式不同的东西,抛出异常”
java - LocalDate:等于与 isEqual
LocalDate
在 Java 中有两个类似的方法equals
和isEqual
.
他们之间有什么区别?当他们输出不同的结果时?