Cómo analizar la cadena "Mon Aug 08 16:44:19 EAT 2016" hasta la fecha en android
private void parseDate() { String p_localDateTime = "Mon Aug 08 16:44:19 EAT 2016"; SimpleDateFormat lv_formatter,lv_parser; String lv_localTimeZone =""; lv_localTimeZone="EAT"; Date lv_localDate = null; lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); //lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); //lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy"); lv_parser.setTimeZone(TimeZone.getTimeZone(lv_localTimeZone)); try { lv_localDate = lv_parser.parse(p_localDateTime); } catch (ParseException e) { e.printStackTrace(); } System.out.println("convertLocalTimeToUTC: "); }
He intentado analizar esta fecha usando 3 diferentes formatos de zona 'z', 'zzz', 'zzzz' pero todos los tiros java.text.ParseException: Unparseable date: "Mon Aug 08 16:44:19 EAT 2016" 20)
- ¿Cómo obtener velocidad de enlace mediante programación?
- ¿Cómo crear la interfaz entre el fragmento y el adaptador?
- No se pudo encontrar la clase 'android.graphics.drawable.RippleDrawable' Unicode issue?
- Android NDK tutorial / guía para principiantes.
- Serialización de Java - deserialización de Android
- Difusión cuando se captura la captura de pantalla en Android 4.0?
- Respecto a la serialización, serialVersionUID y clase incompatible
- Quiero dividir mi cadena con los siguientes símbolos: +, -, *, / pero la función .split sólo acepta una
- HttpClient que redirige a URL con espacios que lanzan excepción
- ¿Puede un Servicio de Android tener permisos múltiples?
- La aplicación de Amazon Marketplace rechazada por contener el archivo de configuración de Eclipse
- Cómo codificar una cadena en un código QR usando zxing en Android?
- Desactivar grupo de menús de Android
Está utilizando clases de fecha y hora viejas problemáticas ahora suplantadas por las clases java.time.
Uso de java.time
Evite usar EAT
como una zona. Nunca utilice la abreviatura de 3-4 letras como EST
o IST
ya que no son zonas horarias verdaderas, no están estandarizadas y ni siquiera son únicas (!). Especifique un nombre de zona horaria adecuado . En este caso particular, java.time es capaz de traducir eso como zona de Africa/Nairobi
.
String input = "Mon Aug 08 16:44:19 EAT 2016"; DateTimeFormatter f = DateTimeFormatter.ofPattern ( "EEE MMM dd HH:mm:ss z uuuu" ).withLocale ( Locale.US ); ZonedDateTime zdt = ZonedDateTime.parse ( input , f );
Descarga en la consola. El método toString
genera una cadena en el formato estándar ISO 8601 , extendida añadiendo el nombre de la zona entre paréntesis. Estos formatos estándar son una opción mucho mejor para cuando necesita serializar valores de fecha y hora en texto.
System.out.println ( "zdt: " + zdt );
Zdt: 2016-08-08T16: 44: 19 + 03: 00 [África / Nairobi]
Acerca de java.time
El framework java.time está integrado en Java 8 y posterior. Estas clases suplantan las viejas clases problemáticas de fecha y hora, como java.util.Date
, .Calendar
, y java.text.SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo de mantenimiento , recomienda la migración a java.time.
Para obtener más información, consulte el Tutorial de Oracle . Y busca Stack Overflow para muchos ejemplos y explicaciones.
Gran parte de la funcionalidad de java.time es back-portada a Java 6 & 7 en ThreeTen-Backport y adaptada además a Android en ThreeTenABP (consulte Cómo usar … ).
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un terreno probatorio para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles como Interval
, YearWeek
, YearQuarter
y más.
Debe agregar la configuración regional:
lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy",Locale.ENGLISH);
Ejemplo Completo:
String p_localDateTime = "Mon Aug 08 16:44:19 EAT 2016"; SimpleDateFormat lv_formatter,lv_parser; String lv_localTimeZone =""; lv_localTimeZone="EAT"; Date lv_localDate = null; lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy",Locale.ENGLISH); //lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); //lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy"); lv_parser.setTimeZone(TimeZone.getTimeZone(lv_localTimeZone)); try { lv_localDate = lv_parser.parse(p_localDateTime); } catch (ParseException e) { e.printStackTrace(); } System.out.println("convertLocalTimeToUTC: ");
Como se menciona en el enlace siguiente parece que Timezone no acepta el formato "ZZZ" según la documentación de SimpleDateFormat. El enlace es: Simpledateformat ParseException
Pude resolver esto mencionando la zona como "hora del este de África" en vez de "COMA" y el código es:
public void dateFormatter() { String dateString = "Mon Aug 23 8:42:19 East Africa Time 2016"; String dateFormat= "EEE MMM dd HH:mm:ss z yyyy"; SimpleDateFormat setDateFormatter; Date formattedDate = null; if(!dateString.isEmpty()) { setDateFormatter = new SimpleDateFormat(dateFormat, Locale.ENGLISH); try { formattedDate = setDateFormatter.parse(dateString); } catch (ParseException e) { e.printStackTrace(); } } System.out.println("Formatted Date: " + formattedDate); }
No hay error de mi parte para el código. Me cambio un poco intentar dar salida al resultado y conseguir esto
"ConvertLocalTimeToUTC: lun Aug 08 21:44:19 SGT 2016"
package self.test.out; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class DateParseTest { public static void main(String[] args) { String p_localDateTime = "Mon Aug 08 16:44:19 EAT 2016"; SimpleDateFormat lv_formatter,lv_parser; String lv_localTimeZone =""; lv_localTimeZone="EAT"; Date lv_localDate = null; lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); //lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); //lv_parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy"); lv_parser.setTimeZone(TimeZone.getTimeZone(lv_localTimeZone)); try { lv_localDate = lv_parser.parse(p_localDateTime); } catch (ParseException e) { e.printStackTrace(); } System.out.println("convertLocalTimeToUTC: "+lv_localDate); } }
Usando Jdk1.6
Esta es una función de utilidad que utilizo en mis proyectos. Simplemente pasa la cadena y el formato de la fecha. En este caso el formato de la fecha sería "EEE MMM dd HH: mm: ss Z aaaa". Espero que sea útil.
public static Date dateFormatter(String dateString, String dateFormat) { SimpleDateFormat setDateFormatter = new SimpleDateFormat(dateFormat, Locale.ENGLISH); Date formattedDate = null; if (!dateString.isEmpty()) { try { formattedDate = setDateFormatter.parse(dateString); } catch (ParseException e) { Log.e(TAG, "Parse Exception Error : " + e.getMessage()); } } return formattedDate; }
- RelativeLayout con scrollview no desplazamiento
- Soporte de Android Wear 2.0 para la aplicación de vista de reloj