2016-04-06 14 views
1

ISO 8601 sözdizimine benzer bir zaman aralığı ifadesini ayrıştırmam gerekiyor, yalnızca alanlar için joker karaktere izin veriyor; ve başlangıç ​​ve sonun iki LocalDateTime nesnesine saklanması. Benim Interval, aralığın içine veya dışına düşüp düşmediğini kontrol etmek için üçüncü bir LocalDateTime veya OffsetDateTime ile karşılaştırmak için API'lere sahip olacaktır.Java 8 ISO 8601 Joker alan (lar) ı içeren aralıklı sözdizimi

E.g .: "****-**-**T00:00:00Z/****-**-**T11:55:00Z" ayrıştırılırken, başlangıç ​​ve bitiş anının tarihi, başlangıç ​​programı yürütme gününün (bir sonraki gün sorunla karşılaşmayı göz ardı ederek) gün olmalıdır. Böyle bir ifadeyi nasıl ayrıştırabilirim?

DÜZENLEME: açıklığa kavuşturmak için, eğer bugün çalıştırırsam, "2016-04-06T00:00:00Z/2016-04-06T11:55:00Z" ayrıştırma eşdeğeri olmalıdır.

+0

belirsiz. Dize aslında '' **** - ** - ** T00: 00: 00Z/**** - ** - ** T11: 55: 00Z "'? Sonuç ne olsun? – Tunaki

+0

@Tunaki, örneğin net olduğunu düşündüm, ancak daha fazla ayrıntı ekledim. – derrdji

+0

Tamam ama istediğiniz sonuç nedir? Bu iki zaman dilimini iki 'LocalDateTime' içine kaydetmek için? Bu iki tarih arasındaki süreyi hesaplayın? – Tunaki

cevap

0

to use wildcards when parsing a string with java.time yolunun olduğunu sanmıyorum. Çok iyi görünmeyen bir hack, *'u 1 ile değiştirmek olacaktır: bu, ayrılmaz bir tarih üretmemelidir. Daha sonra tarih içeriğini görmezden gelebilirsiniz. Örneğin

:

String input = "****-**-01T00:00:00Z/****-04-**T11:55:00Z"; 
String[] dates = input.replace("*", "1").split("/"); 
ZonedDateTime zdt1 = ZonedDateTime.parse(dates[0]); 
ZonedDateTime zdt2 = ZonedDateTime.parse(dates[1]); 

LocalDate day = LocalDate.now(); //or whatever date you like 

LocalDateTime start = zdt1.toLocalTime().atDate(day); 
LocalDateTime end = zdt2.toLocalTime().atDate(day); 

System.out.println(start + "/" + end);