问题标签 [datetimeformatter]
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 - DateTimeFormatter.ofPattern(...) 在 jenkins 上返回 null,而在本地它可以工作
当我们使用 Jacoco 覆盖工具在 Jenkins 上运行测试时,在 IDE 上本地运行的两个测试在 Jenkins 上失败了。
詹金斯堆栈跟踪
测试类
测试
第二个测试方法在单独的类中,并且在不同的模式旁边看起来相同。
所以没有理由把它放在这里。所以:
我想知道 DateTimeFormatter.ofPattern(..) 如何为私有静态最终返回 null?
您是否认为这是因为 PowerMockito 与 Jacoco on-the-fly 仪器 PowerMockito 与 Jacoco 一起使用时会导致问题。如上述链接所述,我们正在发布降低的覆盖率。
当我内联
私有静态最终 DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(TIMESTAMP_FORMAT);
到 generateReferenceId() 方法
对 Jenkins 的测试不再抛出 NPE。
环境细节:
本地环境:Java 版本 1.8.0.271,Win 10 操作系统,国家 PL
詹金斯版本:
Jenkins 在英国的 AWS 上。
java - DateTimeFormatter.parse() 更正日期信息而不是抛出异常
我在 Java SE8 项目中使用 javac 15.0.1。
我对 LocalDate 有不规则的输入:
String fateDate = "1970-02-29"
;
使用 LocalDate 的 parse() 我得到这个异常(正确):
LocalDate.parse(fateDate);
线程“主”java.time.format.DateTimeParseException 中的异常:无法解析文本“1970-02-29”:日期“2 月 29 日”无效,因为“1970”不是闰年
但是使用 DateTimeFormatter 会进行某种更正:
产生于:
{},ISO 解析为 1970-02-28
此行为对于所有月份和 day<32 的所有值都是相同的。因此,对于四月,您不会得到 31 的异常,而是将 LocalDate 以 30 作为一天的值。这看起来不像是“早早失败”的完美化身......
为什么会有不同的行为
- 在 LocalDate.parse() 与 DateTimeFormatter.parse() 中?
- 在 DateTimeFormatter 中为无效的 days_of_month >31 与!>31?
java - 使用时区格式化日期时间
我需要将任何带有用户指定区域设置和时区的传入日期时间字符串解析为唯一模式,以便稍后将其正确存储在数据库中:
但我收到以下错误:
这段代码有什么问题?
java - DateTimeFormatter 问题
请参阅以下测试代码(java 11):
输出:enter code here
注意格式化的时间年份是2021。它只发生在 27/12,可能到 31/12。
谁可以给我解释一下这个?以及如何修复代码以获得正确的格式化字符串?
java - Java ZonedDateTime.format 问题
遇到ZonedDateTime
格式问题。它将 2020 年 12 月末的日期格式化为 2021 年的日期。Java 片段
12 月 28 日、29 日、30 日也是如此。不同时区的结果相同。2019 年 12 月 30 日重复(格式为 2020-12-30)。
原始 Clojure 代码段
我能够复制:
- MacOS HotSpot Java 10(java版本“10.0.2”2018-07-17)
- OpenJDK版本“11.0.9.1” 2020-11-04
如果你对 Lisps 没问题——你可以在云 REPL 中亲眼看到它
java - 如何使用 T 和 Z 将 LocalDate 格式化为 ISO 8601?
我正在尝试生成随机日期和时间,并将其转换为"yyyy-MM-dd'T'HH:mm:ss'Z'"
格式。
这是我尝试过的:
但是在该行dateFormat.format(date)
中,它抱怨:
java.lang.IllegalArgumentException:无法将给定对象格式化为日期
第二个问题是, print 的输出不包含时间:
我不知道如何让它工作。
java - Java:如何获得匹配模式的下一次
是否有一种简单/直接的方法可以使用 DateTimeFormatter 模式来获取与该模式匹配的下一个 LocalDateTime 时间?
我想用它来轻松获取下一次事件应该发生的时间(可以是每天、每周、每月等)。例如,如果事件发生在“星期一 12:00 AM”,我想获得下星期一 12:00 AM 的 LocalDateTime。
我不能这样做LocalDateTime.from(accessor)
,因为输入中可能没有指定年份、月份或月份中的某天。
为了澄清,这里有一些我想要的例子:
java - DateTimeFormatter 返回错误的年份
我使用日期时间格式化程序将日期转换为字符串。
在 dateToPrint 我得到:“01-2020”而不是“01-2021”。
知道我做错了什么吗?
kotlin - 如何稳定片状 DateTimeFormatter#ofLocalizedDateTime 测试?
给定以下基于ThreeTenBp的DateFormatter
:
我在 GNOME 终端 shell ( LANG=en_US.UTF-8
) 中的 Ubuntu 20.04 上运行以下测试:
它成功了。
当我在 Android Studio 4.2 Beta 3 或 Android Studio 2020.3.1 Canary 4 中运行它时,它失败并出现以下错误:
org.junit.ComparisonFailure:
预期:“1/22/19 1:00 AM”
实际:“1/22/19,1:00 AM”
截至 2021 年 1 月 16 日的 Java 新闻
基于 Ole VV 的评论和回答,我发现测试在 shell 中的行为因 Java 版本而异。Gradle 拿起JAVA_HOME
- 因此我需要更新环境变量。请注意,将符号链接更改为java
可执行文件 viasudo update-alternatives --config java
无效。
Java/JRE 9 不适用于此 Ubuntu 版本。
解决方案:Android Studio 中的 Java/JDK
在 IDE 中,我还可以通过以下方式更改JDK location
项目的File > Project Structure ... > SDK location
:
一旦我从预配置的 JDK 11(在 IDE 的安装文件夹中)更改为 JDK 8 - 然后测试成功!
有关的
java - 在 Java 中打印出带有时区的本地化日期
我想在 Java 中创建没有时间的当前日期的本地化版本,但使用用户的时区。
java.time.format.FormatStyle 具有值 - FULL:
和长。
我基本上想要两者的混合 - 我只想显示本地化的长日期,例如:1952 年 1 月 12 日 - 但此外,我想添加这个日期的时区,1952 年 1 月 12 日 PST 或 1952 年 1 月 12 日 MEZ等等。
我试过了:
但这并没有将时区添加到日期。当我也打印出时间时,它可以工作,但在这种情况下,这不是我想要的。