2011-10-05 11 views
5

Tengo una zona horaria y configuración regional del usuario. Ahora quiero obtener el patrón de fecha.Cómo obtener el patrón de fecha de la zona horaria de la configuración regional en Java

Por ejemplo: zona horaria del usuario PST y configuración regional de EE.UU. y el patrón que espero es "MM/dd/aaaa" y si la zona horaria del usuario es IST y la configuración regional de la India, entonces el patrón que espero es "dd/mm/aaaa"

¿Cómo obtener esto?

Nota: Quiero obtener el patrón no la fecha real para poder usarlo en otro lugar.

+1

¿por qué no usar la configuración regional en "este otro lugar", en lugar de solo el patrón? –

+0

Hola Petal Ivanov, en realidad, quiero pasar el patrón a Javascript, así que no puedo usar la configuración regional. –

Respuesta

1

¿Realmente necesitas el TZ para el patrón de fecha? La forma habitual es tener el patrón de datos en el archivo de propiedades localizadas para una configuración regional (o locale_country). Creo que es suficiente.

+0

No necesito TZ para el patrón de fecha.pero, en general, eso es lo que tengo en la mano (detalles de la zona horaria del usuario). "La forma habitual es tener el patrón de datos en el archivo de propiedades localizadas para una configuración regional (o localidad_país)". ¿Quiere decir esto? Mantener el patrón de fechas a nivel de país (y guardarlo en la base de datos o en el sistema de archivos))? –

+0

Sí, lo es. El TZ no se puede recuperar de la solicitud http, por lo que solo se conoce la configuración regional/país del cliente. La otra forma es pedirle al usuario que lo guarde en la base de datos con el resto de la información del usuario. – yoprogramo

3

La traducción lógica de Locale a formatos de fecha/hora está incluida en el constructor java.text.SimpleDateFormat#SimpleDateFormat, precisamente en sun.util.resources.LocaleData#getDateFormatData. Este método proporciona ResourceBundle, que luego se consulta para obtener un patrón particular según el estilo elegido.

En otras palabras, desafortunadamente, JDK no parece proporcionar una API/SPI para acceder a los formatos sin procesar. Mi consejo es usar el Locale todo el tiempo y pasarlo a los métodos de formateo/análisis.

+0

+1 para la configuración regional que pase a sus propios métodos de formateo, la solución flexible definitiva – Dapeng

0

Parece que quiere el static getInstance methods en DateFormat. Toman una constante entera para el estilo (corto, largo, etc.) y, opcionalmente, una configuración regional diferente (en lugar de la configuración predeterminada de la JVM).

0

puede utilizar Interface Map

la k será Locale la V será una cadena con el patrón de fecha

0

Si está utilizando Joda Time (y por qué no usted si tiene alguna Es la elección casi nos metieron en JDK 1.7) se podría hacer algo como esto:?

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

que, desgraciadamente, sólo da un año de dos dígitos. Una forma de solucionar esto sería:

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"); 
} 

Y usted podría considerar el almacenamiento en caché en una ConcurrentHashMap<Locale, String>.

Lo bueno de conseguir una fecha numérica como un patrón pre-localizada como esto es que no requiere ninguna localización más tarde, como lo haría si estuviera usando un patrón como:

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

Sin embargo ... me acabo de dar cuenta de su comentario posterior que desea pasar el patrón a JavaScript - que podría ser muy difícil, ya que utiliza JS patrón diferente formato a Java (ISO, por ejemplo, la fecha es "yyyy-MM-dd" en Java y en "yy-mm-dd" JS). No intenté resolverlo, pero probablemente usaría un mapeo de cadenas en JS o Java para simplemente mapear desde patrones Java a JS. Tendría que conocer cada uno de los patrones que podría encontrar para cada uno de los idiomas antes del curso.

Cuestiones relacionadas