- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 DateTimeFormatterBuilder() 来转换我接收的 JSON 数据(注释代码)并将它们转换为两种格式之一。为了决定使用哪种格式,我使用 REGEX 来查找正方形、 [] 、括号(“.*? ”内包含任何内容)的任何实例。选择正确的格式后,我会将新值解析为另一个 JSON 对象。
问题是,我的程序要么没有正确选择要使用的格式(正则表达式和方法错误),要么没有正确格式化(格式错误),不确定是哪种格式,然后发回错误(底部代码),而不是。
但是,这仅适用于带有方括号的数据。不带方括号的数据得到正确处理。我想知道是否有任何解决方案/建议来解决此问题?
// 2018-11-28T13:09:00.2-04:00
def utcDateFormatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendFraction(ChronoField.MILLI_OF_SECOND, 0, 3, true)
.appendPattern("xxx")
.toFormatter()
// 2018-11-28T13:09:00.528-08:00[America/New_York]
def utcDateFormatterWithZone = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendFraction(ChronoField.MILLI_OF_SECOND, 0, 3, true)
.appendPattern("xxx'['VV']'")
.toFormatter()
if (json.beginDateTime.find("\\[.*?\\]") == true) {
object.setDate(LocalDateTime.parse("${json.beginDateTime}", utcDateFormatterWithZone).format(outFormatter))
} else {
object.setDate(LocalDateTime.parse("${json.beginDateTime}", utcDateFormatter).format(outFormatter))
}
Error: Text '2019-09-26T15:01:07.941-05:00[America/New_York]' could not be parsed, unparsed text found at index 29
最佳答案
这可以更容易地完成。内置 DateTimeFormatter.ISO_ZONED_DATE_TIME
与您的两种格式匹配。
String stringWithoutZoneId = "2018-11-28T13:09:00.2-04:00";
String stringWithZoneId = "2018-11-28T13:09:00.528-08:00[America/New_York]";
LocalDateTime parsedWithoutZoneId = LocalDateTime.parse(
stringWithoutZoneId, DateTimeFormatter.ISO_ZONED_DATE_TIME);
System.out.println(parsedWithoutZoneId);
LocalDateTime parsedWithZoneId = LocalDateTime.parse(
stringWithZoneId, DateTimeFormatter.ISO_ZONED_DATE_TIME);
System.out.println(parsedWithZoneId);
此代码段的输出是:
2018-11-28T13:09:00.200
2018-11-28T13:09:00.528
不过,请注意:您确定要忽略字符串中的偏移量吗?通过这些偏移量,字符串代表明确的时间点。通过解析 LocalDateTime
得到的是属于不同未知偏移量的日期时间。我不明白如何可靠地将它们用于任何有用的事情。
考虑解析为ZonedDateTime
。 one-arg ZonedDateTIme.parse
甚至可以在没有任何显式格式化程序的情况下执行此操作。然后将这些 ZonedDateTime
直接存储在您的对象中,或者转换为 Instant
并存储它们。 Instant
代表一个时间点。如果您无法更改存储的类型,您可能需要将 ZonedDateTime
转换为 UTC(或其他商定的时区),然后转换为 LocalDateTime
。所有这些都是在不知道您的真实需求的情况下说的,所以我可能是错的,只是我认为不是。
@daggett 是正确的:CharSequence.find
返回一个字符串,因此要使 if
语句正常工作,您需要:
if (json.beginDateTime.find("\\[.*?\\]") != null) {
String
永远不可能等于 true
,因此始终选择不带区域的格式化程序。
关于java - 我可以在 DateTimeFormatterBuilder 的格式之间切换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58531560/
我已经配置了格式化程序: public static final DateTimeFormatter DATE_FORMATTER = new DateTimeFormatterBuilder()
这个问题已经有答案了: Parsing LocalDate in Java: What's the pattern for "March 26 2020" (2 个回答) 已关闭 2 年前。 我有一个
假设我有一个日期,例如: Nov 30, 2013 19:00:00.001930000 Eastern Standard Time 我正在尝试使用 DateTimeFormatterBuilder
我正在使用 DateTimeFormatterBuilder() 来转换我接收的 JSON 数据(注释代码)并将它们转换为两种格式之一。为了决定使用哪种格式,我使用 REGEX 来查找正方形、 []
我正在尝试将以下时间戳解析为 ZonedDateTime: Sun Jan 20 16:08:59 +0000 2019 我喜欢尽可能避免使用在字符串中定义的模式,因为我经常忘记字符代表什么(“哈,'
我正在尝试创建一个 DateTimeFormatter以匹配以下示例(它实际上比这稍微复杂一些,但这无关紧要)。 20180302-17:45:21 我写了以下内容,但它导致了异常: new Date
我需要解析各种格式的日期。其中一些缺少“日”。现在我想默认到月底。我不确定是否有直接的方法可以默认为月底 DateTimeFormatter f = new DateTimeFormatterBuil
先写代码。 @Test public void testDateFormat() { // this is ok DateTimeFormat.forPattern("yyyy-MM-
目标 为可以处理以下格式之一的输入的 LocalDate 实例提供灵活的解析器: 年 年月 年月日 实现尝试 下面的类尝试处理第一个和第二个模式。解析适用于年份输入,但年份 + 月份会导致下面列出的异
我的要求是根据指定的一组有效格式验证日期字符串的格式是否正确。 有效格式: MM/dd/yy MM/dd/yyyy 我创建了一个简单的测试方法,它使用 Java 8 DateTimeFormatter
我正在尝试解析从 Bitbucket event payload 收到的以下日期字符串: 2017-09-19T10:39:36+1000 当传入日期位于偏移量 +0000 中时,它可以工作,但 +1
我正在尝试从 Joda 迁移到 Java 8 的 ZonedDateTime,但我遇到了似乎无法解决的 DateTimeFormatterBuilder 问题。 我想接受以下任何一种格式: 2013-
我有以下格式化程序: DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendPattern("yyyy
我正在尝试使用 返回的 DateTimeFormatter 来解析表示具有 IsoField.QUARTER_OF_YEAR 的 LocalDate 值的文本DateTimeFormatterBuil
我目前有一个 Joda 日期解析器,它使用 DateTimeFormatterBuilder 以及我可能收到的六种不同日期格式。 我正在迁移到 Java 8 的 Date 例程,但没有看到等效的例程。
这个问题已经有答案了: Can’t rid of 'T' in LocalDateTime (3 个回答) 已关闭 3 年前。 我有这段代码可以将字符串双向解析为 LocalDateTime: pub
我是一名优秀的程序员,十分优秀!