我的客户向我发送了ISO8601中的日期,该日期有时包含带区域的毫秒,有时没有毫秒和区域。
例如:let allevents = [];
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
database.child("myevents").child(user.uid).on("value", ...)
} else {
// No user is signed in.
}
});
我正在使用新的Java 8 API(2019-05-01T06:55:43+01:00, 2019-05-01T06:55
,LocalDateTime
等)。
我没有找到一个带有格式化程序的DateTimeFormatter
类,该类可以同时处理毫秒和区域,而没有这种处理。
我正在尝试使用单一格式进行输入日期验证
Date
我问是否有一个同时缓存两个的格式化程序,我可以使用多个日期类,如果我失败了,请继续到下一个日期类,例如(LocalDateTime,LocalDate,OffsetDateTime),但是我需要使用单个格式化程序>
答案 0 :(得分:3)
如Ole V.V.评论,您的输入:
...是两种不同的动物。
第一个代表一个时刻,即时间轴上的特定点。该值包括三项信息:
第二个输入只有日期和时间。它缺少time zone或offset-from-UTC的上下文。因此,该值不代表时刻。这不是时间轴上的一点。此值表示大约26-27小时(全球时区范围)内的潜在时刻。第二个是在东京早上6点吗?还是巴黎,几个小时后早上6点发生?还是什至在几个小时后,早上6点到达魁北克?
因此,如果数据源向您提供了这些值的任意组合,则会造成混乱或损坏。我建议咨询该数据的发布者以确定其意图,并可能就其含义上的差异教育他们。
例如:2019-05-01T06:55:43 + 01:00,2019-05-01T06:55
要回答您的特定问题:
OffsetDateTime
。LocalDateTime
。 诱捕DateTimeParseException
。如果在解析一个类时抛出该异常,请尝试与另一个类进行解析。
两个输入均为标准ISO 8601格式。 java.time 类在解析/生成字符串时默认使用标准格式。因此,无需指定格式模式。
try {
OffsetDateTime odt = OffsetDateTime.parse( input ) ;
…
} catch ( DateTimeParseException e ) {
LocalDateTime ldt = LocalDateTime.parse( input ) ;
…
}
答案 1 :(得分:-1)
如果u可以默认缺少的值,则可以使用类 OffsetDateTime 进行存储。 https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html
OffsetDateTime是日期时间的不可变表示形式,带有 偏移量。此类存储所有日期和时间字段,精度为 纳秒,以及UTC /格林威治标准时间的偏移量。例如, 值“ 2nd October 2007 at 13:45.30.123456789 +02:00”可以是 存储在OffsetDateTime中。