2011-10-05 12 views
5

Ho un fuso orario e le impostazioni internazionali dell'utente. Ora voglio ottenere lo schema della data.Come ottenere il pattern della data da Fuso orario delle impostazioni internazionali in Java

Per esempio: fuso orario per l'utente PST e internazionale statunitense e il modello mi aspetto è "MM/dd/yyyy" e se fuso orario dell'utente è IST e Locale in India, poi modello mi aspetto è "dd/MM/yyyy"

Come ottenere questo?

Nota: Voglio ottenere il modello non la data effettiva in modo che io possa utilizzare questo in qualche altro luogo.

+1

perché non utilizzare la locale in "questo altro posto", invece del solo schema? –

+0

Ciao Petal Ivanov, in realtà, voglio passare il pattern a Javascript quindi non posso usare le impostazioni internazionali. –

risposta

1

Davvero hai bisogno della TZ per il modello di data? Il solito modo è avere il modello di dati nel file delle proprietà localizzato per una locale (o locale_country). Penso che sia abbastanza.

+0

Non ho bisogno di TZ per il modello di data.ma in generale, questo è quello che ho in mano (i dettagli del fuso orario dell'utente). "Il modo usuale è avere il modello di dati nel file di proprietà localizzato per una locale (o locale_country)" - questo significa, il modo migliore è di mantenere il modello di data a livello di paese (e salvarlo nel database o nel file system)? –

+0

Sì, lo è. La TZ non può essere recuperata dalla richiesta http, quindi si conoscono solo le impostazioni internazionali/paese del client. L'altro modo è chiedere all'utente il TZ ans salvarlo nel database con il resto delle informazioni dell'utente. – yoprogramo

3

La logica di conversione dei formati data/ora Locale è nascosta nel costruttore java.text.SimpleDateFormat#SimpleDateFormat, precisamente in sun.util.resources.LocaleData#getDateFormatData. Questo metodo fornisce ResourceBundle che viene quindi interrogato per un modello particolare a seconda dello stile scelto.

In altre parole, sfortunatamente JDK non sembra fornire un API/SPI per accedere ai formati grezzi. Il mio consiglio è di usare lo Locale e passarlo ai metodi di formattazione/analisi.

+0

+1 per le impostazioni locali che passano ai tuoi metodi di formattazione, la soluzione flessibile definitiva – Dapeng

0

Sembra che tu voglia il static getInstance methods su DateFormat. Prendono una costante intera per lo stile (breve, lungo, ecc.) E, facoltativamente, una diversa impostazione internazionale (anziché l'impostazione predefinita della JVM).

0

è possibile utilizzare Interface Map

k sarà Locale il v sarà una stringa con il modello di data

0

Se stai usando Joda Time (e perché non sarebbe voi se avete qualsiasi E 'scelta quasi ottenuto in dotazione nel JDK 1.7) si potrebbe fare qualcosa di simile:?

String patternForStyleAndLocale = org.joda.time.format.DateTimeFormat.patternForStyle("S-", locale); 

che purtroppo dà solo un anno a due cifre. Un lavoro in giro per questo sarebbe:

if (!org.apache.commons.lang.StringUtils.contains(patternForStyleAndLocale, "yyyy")) 
{ 
    // The default Joda pattern only has a two digit year for US and Europe, China etc - but we want four digit years 
    patternForStyleAndLocale = StringUtils.replace(patternForStyleAndLocale, "yy", "yyyy"); 
} 

E si potrebbe prendere in considerazione le cache in un ConcurrentHashMap<Locale, String>.

La cosa bella di ottenere una data numerica come un modello pre-localizzate come questo è che non richiede ulteriori localizzazione più tardi, come si farebbe se si stesse utilizzando un modello come ad esempio:

"dd MMM yyyy" // UK: "25 Dec 2010" FRANCE: "25 déc. 2010" etc.. 

Tuttavia ... Ho appena notato dal tuo commento successivo che vuoi passare il pattern a JavaScript, che potrebbe risultare molto difficile dal momento che JS utilizza la formattazione di modelli diversi in Java (la data ISO per esempio è in Java e "yy-mm-dd" in JS). Non ho provato a risolverlo, ma probabilmente utilizzerei un mapping di stringhe nel JS o Java per mappare semplicemente da modelli Java a JS. Dovresti conoscere in anticipo tutti i modelli che potresti incontrare per ognuna delle lingue.

Problemi correlati