Java 8

2015-07-15 60 views
6

'da Döneme Göre ISO tarihi JodaTime'u Java 8 DateTime API ile değiştirmek istiyorum.Java 8

bende ISO-8601 dönemi tarif = i Aşağıdaki kodu yürüterek çok basitçe ayrıştırmak JodaTime yılında P2W5DT11H8M

:

Period.parse("P2W5DT11H8M") ve ben başarılı Period nesne olsun.

Java 8'de aynısını yapabilir miyim?

+0

Ve sonuçla ilgili niyetiniz nedir? Dönemi bir 'LocalDateTime' için eklemeyi planlıyor musunuz? Öyleyse, Assylias'ın cevabı ile örtülü olarak önerilen ekleme algoritması (iki adımda ayrı eklemeler), Joda-Time'ın tanımladığı gibi değildir ve bazı kenar durumlarında farklı sonuçlar verebilir. Ayrıca, dönemler/süreler için Java-8'de biçimlendirme yetenekleri yoktur, böylece kararınız hakkında tekrar düşünebilirsiniz. –

+1

@MenoHochschild JodaTime'da olduğu gibi aynı Döneme sahip olmak istiyorum. Şu anda veriyi kaybediyorum, örneğin, dakikalar çalışamıyorum, bunun yerine Java 8 - Duration sınıfından ekstra uygulama kullanmalıyım. – ServerSideCat

cevap

-4

Kısa cevap:

Period period = Period.parse("P2W5DT11H8M"); 

Uzun cevap: when to use Period or Duration üzerine Oracle tarafından iyi bir açıklama yoktur. Bazı güzel kod örnekleri ile birlikte gelir ve sahip olabileceğiniz tüm takip sorularına cevap vermelidir.

+3

Bu, çalışma zamanında bir istisna atar. – assylias

5

Java 8'deki bir dönem yalnızca yıl/ay/gün bileşenlerine sahiptir. Bir Sürenin saat/dakika/saniye bileşenleri vardır. Dizeyi el ile ayrıştırmanız gerekecek gibi görünüyor. Bir seçenek aşağıdaki kod gibi görünebilir (giriş doğrulama vb. Eklemeniz gerekir) - daha iyi alternatifler olabilir.

public static void main(String[] args) { 
    System.out.println(PeriodAndDuration.parse("P2W5DT11H8M")); 
} 

public static class PeriodAndDuration { 
    private final Period p; 
    private final Duration d; 

    public PeriodAndDuration(Period p, Duration d) { 
    this.p = p; 
    this.d = d; 
    } 

    public Period getPeriod() { 
    return p; 
    } 

    public Duration getDuration() { 
    return d; 
    } 

    public static PeriodAndDuration parse(String input) { 
    int periodStart = input.indexOf("P"); 
    int timeStart = input.indexOf("T"); 
    Period p = Period.parse(input.substring(periodStart, timeStart)); 
    Duration d = Duration.parse("P" + input.substring(timeStart, input.length())); 
    return new PeriodAndDuration(p, d); 
    } 

    @Override 
    public String toString() { 
    return p.toString() + d.toString(); 
    } 
} 
+0

Cevabınız için teşekkürler. Öyleyse, anladığım kadarıyla, böyle bir dize ayrıştırmaktan sorumlu olmalıyım ve bundan sadece yıl/ay/gün ayrılabileceğimi düşünmeliyim. – ServerSideCat

+1

Evet bildiğim kadarıyla - başka biri daha iyi bir cevap bulabilir. – assylias