2014-11-19 11 views
17

Bu uyarı hakkında endişelenmem gerekir mi? Ya uyarıyı görmezden gelirsek?
bu uyarı ne demek:
yerel biçimlendirme kullanmak getDateInstance(), getDateTimeInstance() veya getTimeInstance() veya ASCII tarihlerde örneğin Locale.US için birlikte new SimpleDateFormat(String template, Locale locale) kullanmak almak için.
Aşağıdaki kodun 2. satırında. App kod ile iyi çalışıyor. Göstermek istedim, örneğin, 19 Nov 2014.SimpleDateFormat uyarısı Yerel biçimlendirme kullanmak için getDateInstance(), getDateTimeInstance() veya getTimeInstance(),

public static String getFormattedDate(long calendarTimeInMilliseconds) { 
    SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy"); //ON THIS LINE 
    Date now = new Date(); 
    now.setTime(calendarTimeInMilliseconds); 
    String strDate = sdfDate.format(now); 
    return strDate; 
} 

Bu here gösterildiği gibi tarihi biçimlendirmek için doğru bir yol olduğunu düşünüyorum.

cevap

32

Şu anda SimpleDateFormat(String) yapıcısını kullanıyorsunuz. Bu, varsayılan yerel ayarı ve Locale belgelerinin size bildirdiği gibi, be wary of the default locale, beklenmedik çıktılar çeşitli sistemlerde üretilebileceğini belirtir.

Bunun yerine SimpleDateFormat(String, Locale) yapıcısını kullanmalısınız. Kullanmak istediğiniz yerel bir ek parametre alacak. Çıktının tutarlı bir şekilde makinede okunabilir olduğundan emin olmak istiyorsanız (kullanıcının gerçek yerel ayarından bağımsız olarak her zaman aynı görünür), Locale.US'u seçebilirsiniz. Makine teslim edilebilirliğini umursamıyorsanız, Locale.getDefault()'u kullanacak şekilde açıkça ayarlayabilirsiniz. Böyle bir şey olmazdı senin örneğin kod üzerinde olanlar kullanma

:

// for US 
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy", Locale.US); 

// or for default 
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy", 
     Locale.getDefault()); 
+0

SimpleDateFormat sdfDate = new SimpleDateFormat ("d MMM yyyy", Locale.getDefault()); Bu biçim, 19 Kasım 2014 veya "d MMM yyyy" tarihini farklı dilde bile mi biçimlendirecek? –

+1

Şablon hala "SimpleDateFormat" (http://developer.android.com/) 'de görüldüğü gibi "aydaki gün", "yıl içinde ay", "yıl" anlamına gelen "d MMM yyyy" olarak kalacak. referans/java/text/SimpleDateFormat.html) dokümanlar, ancak emin olmanın en iyi yolu, gerçek hayatta nasıl çalışacağını gösterecek şekilde cihazınızı/emülatörünüzü özel bir yerel ayara geçirerek kendinizi test etmektir. –

+0

Locale.getDefault(). Dolayısıyla, varsayılan yerel ayar, kullanıcıya veri sunmayı içeren görevler için uygundur. Bu durumda, kullanıcının tarih/saat biçimlerini, sayı biçimlerini, küçük harflere dönüştürme kurallarını vb. Kullanmak istersiniz. Bu durumda, kolaylık yöntemlerini kullanmak güvenlidir. –

2

Bunu göz ardı edebilirsiniz, ancak farklı bir dil kullanan kullanıcılar için tarihlerin beklenmedik şekilde görüntülenebileceğini bildiren uyarı vardır. Biçimi kendi yerel ayarınızda zorlamak istiyorsanız, Locale.US'u (veya biçim gereksinimlerinizle eşleşen yerel ayarlar) kullanın. Aksi takdirde, yerelleştirilmiş biçimlendirme için getInstance() yöntemlerinden birini kullanın.

İlgili konular