variable tipo para metodos ingresar hora fecha ejemplo declarar dato convertir clase java date datetime calendar simpledateformat

metodos - tipo de dato para hora en java



Convertir cadena en objeto de calendario en Java (8)

tl; dr

YearMonth.from( ZonedDateTime.parse( "Mon Mar 14 16:02:37 GMT 2011" , DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" ) ) ).toString()

2011-03

Evite las clases heredadas de fecha y hora

La forma moderna es con las clases java.time. Las antiguas clases de fecha y hora como Calendar han demostrado estar mal diseñadas, son confusas y problemáticas.

Defina un formateador personalizado para que coincida con su entrada de cadena.

String input = "Mon Mar 14 16:02:37 GMT 2011"; DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );

Parse como ZonedDateTime .

ZonedDateTime zdt = ZonedDateTime.parse( input , f );

Usted está interesado en el año y el mes. Las clases java.time incluyen la clase YearMonth para ese propósito.

YearMonth ym = YearMonth.from( zdt );

Puede interrogar los números de año y mes si es necesario.

int year = ym.getYear(); int month = ym.getMonthValue();

Pero el método toString genera una cadena en formato estándar ISO 8601 .

String output = ym.toString();

Pon todo esto junto.

String input = "Mon Mar 14 16:02:37 GMT 2011"; DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" ); ZonedDateTime zdt = ZonedDateTime.parse( input , f ); YearMonth ym = YearMonth.from( zdt ); int year = ym.getYear(); int month = ym.getMonthValue();

Volcado a la consola.

System.out.println( "input: " + input ); System.out.println( "zdt: " + zdt ); System.out.println( "ym: " + ym );

entrada: Lun Mar 14 16:02:37 GMT 2011

zdt: 2011-03-14T16: 02: 37Z [GMT]

ym: 2011-03

Código de Live

Vea este código ejecutándose en IdeOne.com .

Conversión

Si debe tener un objeto de Calendar , puede convertirlo en un GregorianCalendar utilizando nuevos métodos agregados a las clases anteriores.

GregorianCalendar gc = GregorianCalendar.from( zdt );

Acerca de java.time

El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases legacy fecha y hora como java.util.Date , Calendar y SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a java.time.

Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases de java.time?

  • Java SE 8 y SE 9 y posteriores
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y SE 7
    • Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
  • Android
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) específicamente para Android.
    • Vea Cómo usar ...

El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval , YearWeek , YearQuarter y more .

Soy nuevo en Java, por lo general trabajo con PHP.

Estoy tratando de convertir esta cadena:

Lun Mar 14 16:02:37 GMT 2011

En un objeto de calendario para que pueda extraer fácilmente el año y el mes de esta manera:

String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);

¿Sería una mala idea analizarlo manualmente? ¿Usando un método de subcadena?

¡Cualquier consejo ayudaría!


Bueno, creo que sería una mala idea replicar el código que ya está presente en clases como SimpleDateFormat .

Por otro lado, personalmente sugiero evitar el Calendar y la Date completo si es posible, y usar Joda Time en su lugar, como una API de fecha y hora mucho mejor diseñada. Por ejemplo, debe tener en cuenta que SimpleDateFormat no es seguro para subprocesos, por lo que necesita SimpleDateFormat subprocesos, sincronización o una nueva instancia cada vez que la use. Los analizadores y formateadores Joda son seguros para subprocesos.


Método simple:

public Calendar stringToCalendar(String date, String pattern) throws ParseException { String DEFAULT_LOCALE_NAME = "pt"; String DEFAULT_COUNTRY = "BR"; Locale DEFAULT_LOCALE = new Locale(DEFAULT_LOCALE_NAME, DEFAULT_COUNTRY); SimpleDateFormat format = new SimpleDateFormat(pattern, LocaleUtils.DEFAULT_LOCALE); Date d = format.parse(date); Calendar c = getCalendar(); c.setTime(d); return c; }


No es necesario crear un nuevo calendario, SimpleDateFormat ya usa un calendario debajo.

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.EN_US); Date date = sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done Calendar cal = sdf.getCalendar();

(No puedo comentar todavía, es por eso que creé una nueva respuesta)


Parse un tiempo con zona horaria, Z en patrón es para zona horaria

String aTime = "2017-10-25T11:39:00+09:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd''T''HH:mm:ssZ", Locale.getDefault()); try { Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(aTime)); Log.i(TAG, "time = " + cal.getTimeInMillis()); } catch (ParseException e) { e.printStackTrace(); }

Salida: devolverá la hora UTC

1508899140000

Si no configuramos la zona horaria en un patrón como yyyy-MM-dd''T''HH:mm:ss . SimpleDateFormat usará la zona horaria que se haya configurado en Setting


Sí, sería una mala práctica analizarlo usted mismo. Eche un vistazo a SimpleDateFormat , convertirá la Cadena en una Fecha y puede establecer la Fecha en una instancia de Calendario.


SimpleDateFormat es genial, solo tenga en cuenta que HH es diferente de hh cuando se trabaja con horas. HH devolverá horas basadas en 24 horas y hh regresará horas basadas en 12 horas.

Por ejemplo, lo siguiente devolverá 12 horas de tiempo:

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa");

Si bien esto devolverá 24 horas de tiempo:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");


Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011"));// all done

nota: configure la configuración Locale según su entorno / requisito

Ver también