A ver si ésto te ayuda:
http://www.exampledepot.com/egs/java.text/FormatDateLoc.html
Hola!
Si, eso lo había mirado, pero el problema ahí es que para hacer eso es necesario crear una nueva instancia de SimpleDateFormat y yo tengo una única instancia. He leído por ahí que es más efectivo y demás...
Saludos!
Buenas!
Estoy haciendo una aplicación en la que tengo un método de utilidades que convierte una Date en String, pero a la hora de poner la aplicación en otro idioma tengo problemas...
Este es el método que convierte la fecha en cadena de texto:
public static String dateToString(Date fecha, String formato) {
getDateFormat().applyLocalizedPattern(formato);
return getDateFormat().format(fecha);
}
private static ThreadLocal dateFormat = new ThreadLocal() {
protected synchronized Object initialValue() {
return new SimpleDateFormat();
}
};
public static SimpleDateFormat getDateFormat() {
return (SimpleDateFormat) (dateFormat.get());
}
El problema es que cuando el idioma es otro que no sea Español o Inglés (por ejemplo Catalán: ca_ES) y le indico que el formato de la fecha sea dd/MM/yyyy me lanza la siguiente excepción:
java.lang.IllegalArgumentException: Illegal pattern character 'd'
at java.text.SimpleDateFormat.translatePattern(SimpleDateFormat.java:2000)
at java.text.SimpleDateFormat.applyLocalizedPattern(SimpleDateFormat.java:2055)
at es.novasoft.nfc.comun.utilidades.NFCFecha.dateToString(NFCFecha.java:751)
at es.novasoft.nfc.comun.utilidades.NFCFecha.dateToString(NFCFecha.java:737)
at es.novasoft.nfc.comun.utilidades.NFCFecha.hoyTexto(NFCFecha.java:484)
at com.csc.health.vacc.cliente.paneles.estadisticas.ListadosFiltroControlador.inicializa(ListadosFiltroControlador.java:267)
at com.csc.health.vacc.cliente.paneles.estadisticas.ListadosFiltroControlador.cargarDatos(ListadosFiltroControlador.java:1000)
at com.csc.health.vacc.cliente.paneles.Ventana$10.construct(Ventana.java:755)
at es.novasoft.nfc.cliente.utilidades.NFCSwingWorker$2.run(NFCSwingWorker.java:110)
at java.lang.Thread.run(Thread.java:662)
Al parecer esto es porque lo caracteres establecidos en DateFormatSymbols.getLocalPatternChars() son distintos para cada Locale.
Una posible solución sería establecer, siempre que llame a este método, los caracteres que tiene el Locale español (getDateFormat().getDateFormatSymbols().setLocalPatternChars("GyMdkHmsSEDFwWahKzZ")),
pero esto no me parece correcto.
¿Hay alguna forma, independientemente del Locale establecido, en que yo le pase el formato dd/MM/yyyy y el lo comprenda?
He visto en alguna web la manera de obtener el "Localized Pattern", así:
final DateFormat dateInstance = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
final String format = dateInstance.format(adFecha);
if (dateInstance instanceof SimpleDateFormat) {
final String pattern = ((SimpleDateFormat) dateInstance).toPattern(); //dd/MM/yy
final String localizatedPattern = ((SimpleDateFormat) dateInstance).toLocalizedPattern(); //para ca_ES sería tt/MM/uu
}
return getDateFormat().format(adFecha);
El problema de esto es que me tengo que ceñir a las constantes de DateFormat para el formato. Por eso como comento más ariiba lo que me gustaría conseguir es que yo le indicase la cadena dd/MM/yyyy y el me devolviera tt/MM/uuuu (en el caso de ca_ES).
¿Alguien ha tenido este problema?
Gracias y Saludos!