如何从不包含zone
和其他字段的字符串中解析ZoneDateTime
?如何解析ZonedDateTime与默认区域?
下面是测试中斯波克重现:
import spock.lang.Specification
import spock.lang.Unroll
import java.time.ZoneId
import java.time.ZoneOffset
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@Unroll
class ZonedDateTimeParsingSpec extends Specification {
def "DateTimeFormatter.ISO_ZONED_DATE_TIME parsing incomplete date: #value #expected"() {
expect:
ZonedDateTime.parse(value, DateTimeFormatter.ISO_ZONED_DATE_TIME) == expected
where:
value | expected
'2014-04-23T04:30:45.123Z' | ZonedDateTime.of(2014, 4, 23, 4, 30, 45, 123_000_000, ZoneOffset.UTC)
'2014-04-23T04:30:45.123+01:00' | ZonedDateTime.of(2014, 4, 23, 4, 30, 45, 123_000_000, ZoneOffset.ofHours(1))
'2014-04-23T04:30:45.123' | ZonedDateTime.of(2014, 4, 23, 4, 30, 45, 123_000_000, ZoneId.systemDefault())
'2014-04-23T04:30' | ZonedDateTime.of(2014, 4, 23, 4, 30, 0, 0, ZoneId.systemDefault())
'2014-04-23' | ZonedDateTime.of(2014, 4, 23, 0, 0, 0, 0, ZoneId.systemDefault())
}
}
前两个测试通过,所有其他失败,DateTimeParseException:
- '2014-04-23T04:30:45.123' 不能“2014-04-23T04:30”在索引23
- 解析不能在索引被解析16
- “2014年4月23日”无法在索引10 被解析
如何解析时间和区域设置为默认的未完成日期?
谢谢,它看起来更好,但并没有解决一个问题:
所以,再次失败,因为我无法设置解析器的默认时区。 其他部件相同的东西,用于检查日期。 例如,如何使用当前日期和系统时区将字符串'23:45'解析为ZonedDateTime? – stokito 2014-12-07 14:09:55对于问题中的所有5个示例字符串,它都使用java 8u25运行正常。所以,不知道你的问题是什么。 – bowmore 2014-12-07 16:24:07
问题是我想获得LocalDateTime的ZonedDateTime insted LocalDateTime – stokito 2014-12-08 07:54:05