Jak przeanalizować ZoneDateTime
z ciągu, który nie zawiera zone
i innych pól?Jak przeanalizować ZonedDateTime ze strefą domyślną?
Oto test Spocka do reprodukcji:
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())
}
}
pierwsze dwa testy przeszły, wszyscy inni nie powiodło się z DateTimeParseException:
- '2014-04-23T04: 30: 45,123' nie może być analizowany w indeksie 23
- „2014-04-23T04: 30” nie mógłby być przetwarzany z indeksem 16
- „23.4.2014” nie może być analizowany w indeksie 10
Jak analizować niekompletne daty z czasem i strefą ustawioną na wartość domyślną?
Dzięki, to wygląda lepiej, ale nie rozwiązuje problemu:
Tak, to znowu nie powiedzie się, ponieważ nie mogę ustawić Domyślna strefa czasowa dla analizatora składni. To samo dotyczy innych części, dla daty egzaminu. Na przykład, w jaki sposób można parsować ciąg znaków, taki jak "23: 45", do ZonedDateTime z bieżącą datą i strefą czasową systemu? – stokitoProgram działał poprawnie przy użyciu języka Java 8u25 dla wszystkich 5 przykładowego ciągu znaków w pytaniu. Więc nie jestem pewien, jaki masz problem. – bowmore
Problem polega na tym, że chciałbym dostać ZonedDateTime z LocalDateTime – stokito