我需要将dateTime字符串
转换为millis,为此我使用了ThreeTenABP,但是offsetDateTime.parse
无法解析用于ex的dateTime字符串
。“2020-08-14T20:05:00”
并给出以下例外情况。
Caused by: org.threeten.bp.format.DateTimeParseException:
Text '2020-09-22T20:35:00' could not be parsed:
Unable to obtain OffsetDateTime from TemporalAccessor:
DateTimeBuilder[, ISO, null, 2020-09-22, 20:35], type org.threeten.bp.format.DateTimeBuilder
我已经搜索过类似的问题,但找不到确切的解决方案。
下面是我在Kotlin中使用的代码。
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss",
Locale.ROOT)
val givenDateString = event?.eventDateTime
val timeInMillis = OffsetDateTime.parse(givenDateString, formatter)
.toInstant()
.toEpochMilli()
问题是字符串
中缺少偏移量,您试图将其解析为offsetdatetime
。如果没有ZoneOffset
,则无法创建OFFSetDateTime
,但是不能从这个字符串
派生ZoneOffset
(可以猜测它是UTC,但是在这种情况下猜测是不合适的)。
您可以将字符串
解析为LocalDateTime
(一天中没有区域或偏移量的日期和时间的表示形式),然后添加/附加所需的偏移量。您甚至不需要自定义DateTimeFormatter
,因为您的字符串
是ISO格式的,可以使用默认的内置格式化程序解析:
fun main() {
// example String
val givenDateString = "2020-09-22T20:35:00"
// determine the zone id of the device (you can alternatively set a fix one here)
val localZoneId: ZoneId = ZoneId.systemDefault()
// parse the String to a LocalDateTime
val localDateTime = LocalDateTime.parse(givenDateString)
// then create a ZonedDateTime by adding the zone id and convert it to an OffsetDateTime
val odt: OffsetDateTime = localDateTime.atZone(zoneId).toOffsetDateTime()
// get the time in epoch milliseconds
val timeInMillis = odt.toInstant().toEpochMilli()
// and print it
println("$odt ==> $timeInMillis")
}
这个示例代码产生以下输出(注意datetime表示形式中后面的z
,这是+00:00
小时的偏移量,UTC时区,我在Kotlin Playground写了这段代码,它似乎有UTC时区;-)):
2020-09-22T20:35Z ==> 1600806900000
请注意,我使用java.time
而不是ThreeTen ABP进行了尝试,ThreeTen ABP对于许多(较低的)Android版本来说已经过时了,因为有Android API desugring。但是,这不会有什么不同,因为当我第一次尝试时,您的示例代码抛出了完全相同的异常,这意味着ThreeTen不应该为此负责。
问题内容: 如果能找到有关此异常的错误的帮助,我将不胜感激: 和以下代码: 它用引发异常。 ,作为例外。 谢谢。 问题答案: 代表时区字符。需要引用:
问题内容: 我正在获取以下代码 如果我注释掉该行,那么我会在输出中看到时差 我究竟做错了什么?? 问题答案: “ S”为毫秒。每秒有1000毫秒(0到999)。389362大于999。多余的389000毫秒将转换为389秒或6分29秒,并添加到时间中。
问题内容: 我希望将日期格式更改为MM / DD / YYYY,当前为YYYY / MM / DD。 我尝试进行研究,但具有讽刺意味的是,情况总是相反。现在有人可能会说将其向后尝试从那里开始尝试,但没有成功。 我上课的所有事情: 顺便说一下,我不熟悉的简单日期格式类和日期格式类,并且尝试实现它们均未成功。 问题答案: 只需使用即可转换为。无需麻烦的API。 而是在整个代码中使用此对象。每当您需要将
问题内容: 我想在Java中解析这种格式为dd / MM / yyyy [至dd / MM / yyyy]的String的最佳方法是什么。带[]的字符串是可选的,dd代表日期的2位数字表示,MM是月份的2位数字表示,yyyy是年份的4位数字表示。 更新资料 谢谢大家的快速响应,但是我忘了告诉您[]是象征可选的,字符串中没有[]示例字符串可能是 22/01/2010 从22/01/2010至23/0
我有一个包含OClass对象的列表。我想创建这个对象的JSON。下面是我的代码: com.fasterxml.jackson.databind.jsonMappingException:未发现用于com.ontotext.trree.owlim_ext.r类的序列化程序,也未发现用于创建BeanSerializer的属性(为了避免异常,禁用serializationconfig.serializa
问题内容: 我正在尝试将yyyy-MM-dd’T’HH:mm:ss.SSSz格式的日期格式化为yyyy-mm-dd HH:mm:ss,这应该很简单,但我无法正常工作。 必须解析的日期的格式为:2012-10-01T09:45:00.000 + 02:00 现在,我使用此简单的日期格式化程序对其进行格式化: 但这给出的输出类似于2012-10-01T09:45:00.000UTC + 00:00。