2010-01-05 26 views
18

Tarih biçimini değiştirmeye çalışırken istisna yapıyorum: ayrılmamış tarih ve bu sorunun nasıl giderileceğini bilmiyorum.Java: ayrıştırılabilir tarih istisnası

Bir olay tarihini temsil eden ve bu tarihi GUI'de farklı biçimde görüntülemek istediğiniz bir dize alıyorum.

private String modifyDateLayout(String inputDate){ 
     try { 
      //inputDate = "2010-01-04 01:32:27 UTC"; 
      Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
      return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
      return "15.01.2010"; 
     } 
    } 

String modifiedDateString = originalDate.toString(); 

kukla olduğunu Neyse hattı:

Ne yapmaya çalışıyordum şudur.

dd.MM.yyyy SS:: dd: Aşağıdaki biçimde bir tarih dizesi almak istiyorum

: ss

ve giriş Dize örneği şudur 2010-01-04 01:32:27 UTC

Yukarıdaki örnek dizinin (String) String formatına nasıl dönüştürüleceğini bilen var mı dd.MM.yyyy HH: mm: ss?

Teşekkür ederiz!

Düzelt: Yanlış giriş tarihi biçimini düzelttim ama yine de çalışmıyor. Yukarıda yapıştırılan yöntem ve aşağıda hata ayıklama oturumunun ekran görüntüsüdür.

alt text http://img683.imageshack.us/img683/193/dateproblem.png

#update Ben

String[] timezones = TimeZone.getAvailableIDs(); 

koştu ve UTC dize dizide yoktur. Bu garip bir problem.

private String modifyDateLayout(String inputDate){ 
    try { 
     inputDate = inputDate.replace(" UTC", ""); 
     Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate); 
     return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     return "15.01.2010"; 
    } 
} 

Ama yine de uzak dilimini kesilmeden orijinal girdi dönüştürmek için tercih ediyorum:

Ben çalışan bir kirli kesmek yaptı.

Bu kod, JDK 1.6 kullanan Android telefon için yazılmıştır.

+0

Bunun çok eski bir iş parçacığı olduğunu biliyorum, ancak "UTC" tarih biçiminde olduğunda ayrıştırma istisnasıyla ilgili şüpheleri netleştirmek için. Kod Android'de bozuldu. [Android bug report] (http://code.google.com/p/android/issues/detail?id=14963) – Creniale

cevap

39

Temelde burada yaptığınız, zaten sabit bir desene sahip olan Date#toString() belgesine güvenmektir. Java Date nesnesini başka bir okunabilir String modeline dönüştürmek için SimpleDateFormat#format()'a ihtiyacınız vardır. Bu arada

private String modifyDateLayout(String inputDate) throws ParseException{ 
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
    return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
} 

, "ayrıştırılamaz tarihi" istisna burada sadece SimpleDateFormat#parse() tarafından atılmak olabilir. Bu, inputDate'un beklenen desende "yyyy-MM-dd HH:mm:ss z" olmadığı anlamına gelir. Deseni muhtemelen inputDate'un gerçek deseniyle eşleştirmek için değiştirmeniz gerekecektir.

Güncelleme: Tamam, benim yaptığım bir test:

public static void main(String[] args) throws Exception { 
    String inputDate = "2010-01-04 01:32:27 UTC"; 
    String newDate = new Test().modifyDateLayout(inputDate); 
    System.out.println(newDate); 
} 

Bu doğru yazdırır:

03.01.2010 21:32:27 

Güncelleme 2 (ı GMT-4 çıkıyorum): Düzenlemenizin başına, bunun üzerinde gerçekten bir ParseException var. En şüpheli bölüm daha sonra UTC'un saat dilimi olacaktır. Bu, Java ortamınızda bilinen mu? Hangi Java sürümünü ve hangi işletim sistemini kullanıyorsunuz? TimeZone.getAvailableIDs()’u kontrol edin. Aralarında bir UTC olmalıdır.

+0

Sorun şu ki satır Tarih date = formatter.parse (inputDate); bir istisna atar. Giriş formatını yyyy-MM-dd HH: mm: ss z olarak sabitledim ama yine de bir istisna atar. –

+0

Bunu beklemeden önce eklenen düzenlememe bakın. Doğru kalıbı bulmayla ilgili daha fazla yardım istiyorsanız, ** fiili ** 'inputDate 'değerinin bir örneğini göndermeniz gerekir. – BalusC

+1

Bu tarihi ayrıştırmak için şu zorluğu yaşıyorum: "11/10/2011 06:03:19 p.m." – DkAngelito

İlgili konular