2014-11-19 4 views
17

Devo essere preoccupato per questo avviso? Cosa succede se ignoro l'avviso?
Cosa significa questo avvertimento:
per ottenere l'uso getDateInstance(), getDateTimeInstance() o getTimeInstance(), o utilizzare new SimpleDateFormat(String template, Locale locale) con ad esempio Locale.US per ASCII date formattazione locale.
Nella seconda riga del codice seguente. L'app funziona perfettamente con il codice. Volevo mostrare la data, ad esempio, 19 Nov 2014.avviso SimpleDateFormat Per ottenere la formattazione locale utilizzare getDateInstance(), getDateTimeInstance() o 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; 
} 

credo che questo sia un modo corretto per il formato della data, come mostrato here.

risposta

32

Attualmente si utilizza il costruttore SimpleDateFormat(String). Ciò implica le impostazioni internazionali predefinite e, come indicato dalla documentazione delle impostazioni locali, be wary of the default locale, in quanto è possibile produrre risultati imprevisti su vari sistemi.

Utilizzare invece il costruttore SimpleDateFormat(String, Locale). Prenderà in considerazione un parametro aggiuntivo: la locale che si desidera utilizzare. Se si desidera assicurarsi che l'output sia leggibile dalla macchina in modo coerente (appare sempre uguale, indipendentemente dalla locale effettiva dell'utente), è possibile selezionare Locale.US. Se non ti interessa la possibilità di ridimensionare la macchina, puoi impostarla in modo esplicito per utilizzare Locale.getDefault().

Utilizzando quelli sul codice di esempio sarebbe simile a questa:

// 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()); Questo formato formerà la data del 19 novembre 2014 o "d MMM yyyy" anche in una lingua diversa? –

+1

Il modello rimarrà 'd MMM yyyy' che sta per" giorno in mese "," mese in anno "," anno "come si può vedere in [SimpleDateFormat] (http://developer.android.com/ reference/java/text/SimpleDateFormat.html), ma il modo migliore per assicurarti è di testare te stesso passando il tuo dispositivo/emulatore a una locale personalizzata in quanto ti mostrerà come funzionerà nella vita reale. –

+0

Locale.getDefault(). Pertanto, le impostazioni locali predefinite sono appropriate per le attività che prevedono la presentazione di dati all'utente. In questo caso, si desidera utilizzare i formati data/ora dell'utente, i formati numerici, le regole per la conversione in lettere minuscole e così via. In questo caso, è sicuro usare i metodi di convenienza. –

2

Puoi ignorarlo, ma l'avviso è lì per farti sapere che le date potrebbero essere visualizzate inaspettatamente per gli utenti che utilizzano una lingua diversa. Se si desidera forzare il formato nelle proprie impostazioni internazionali, utilizzare Locale.US (o qualsiasi locale corrisponde ai requisiti del formato). In caso contrario, utilizzare uno dei metodi getInstance() per la formattazione localizzata.

Problemi correlati