Advertisement
  1. Code
  2. Android SDK

Aprenda Java para Desarrollo en Android: Fecha y Hora

Scroll to top
Read Time: 10 min
This post is part of a series called Learn Java for Android Development.
Learn Java for Android Development: String Basics
Learn Java for Android Challenge: Strings

Spanish (Español) translation by Rodney Martinez (you can also view the original English article)

En este tutorial, aprenderá a trabajar con fechas y tiempos en Java y dentro de las aplicaciones de Android. Los datos Fecha y Hora pueden ser; determinados, modificados y almacenados en una variedad de formas.

Las aplicaciones de Android escritas en Java, un lenguaje de programación. Java tiene una cantidad de datos de tipo primitivo para diferentes tipos de números (enteros, flotantes, etcétera), valores Boolean, y caracteres. Java, también, incluye numerosas clases para almacenamiento, formatear y modificar datos de fecha y hora para usarlos dentro de sus aplicaciones para Android. En este tutorial aprenderá cómo determinar la fecha y la hora actual, almacenar fecha y hora y mostrarlos en una cantidad de formas.

Lo que usted necesitará

Técnicamente, no necesita ninguna herramienta para completar este tutorial pero, sin duda, los necesitará para desarrollar aplicaciones en Android.

Para desarrollar aplicaciones en Android (o cualquier aplicación en Java, por ende), usted necesita desarrollar un ambiente para escribir y construir aplicaciones. Eclipse es un ambiente de desarrollo (IDE) muy popular para Java y el preferido IDE para el desarrollo en Android. Es gratuito y está disponible para los sistemas operativos: Windows, Mac y Linux.

Para completar instrucciones sobre cómo instalar Eclipse (incluyendo las versiones que tienen soporte) y el Android SDK, vea el sitio web para el desarrollo en Android.

¿Cuál es la Fecha y la Hora?

Primero lo primero: la fecha y la hora son básicamente dos partes de la misma pieza (un punto en el tiempo).  Cuando se trata de almacenas fechas y horas en una computadora, puede ser útil regresar a su prime clase de computación y recordar que todos los datos en una computadora están formados de "unos y ceros". Las computadoras (y los dispositivos Android no son la excepción) en realidad no tienen un sentido del tiempo como las personas, sino que en su lugar conservan una representación numérica de la fecha y la hora actual (marcando siempre un milisegundo a la vez) y luego formatear esta información en diferentes formas para ajustarlas a propósitos específicos. Después de todo, un solo instante en el tiempo es interpretado de manera distinta dependiendo de su zona de tiempo o ubicación, ya sea si usted reconoce o no (o su área) su horario de verano, y varios otros factores.

Añada a este hecho que las fechas y las horas están mostradas de forma distinta en diferentes culturas y ubicaciones. Por ejemplo, en los Estados Unidos, a menudo formateamos nuestras fechas así: Abril 6, 1981 o 04/06/1981, mientras que en Europa, el día, por lo general, precede al mes, así: 6 de Abril. 1981 o 06/04/1981. Igualmente, algunos países tienen el concepto de AM y PM con unas 12 horas, mientras que en otros países, simplemente usan un reloj de 24 horas.

Las computadoras, incluyendo los dispositivos Android, calculan las horas y las fechas como un solo número (uno largo) que aumenta a medida que el tiempo pasa. Los números mismos son iguales a los números de los milisegundos pasados desde una fecha específica en el pasado. En este caso, el punto de tiempo en el cual el "tiempo" empezó marcando esto:: Este mecanismo está contemplado para un tiempo Unix o POSIX.

¿Qué es lo que hace un Desarrollador?

¡Prueba rápida! ¿Cuál de los siguientes strings representa de forma correcta el cuarto mes del año calendario (Gregoriano): A, April, APR, Apr, 4 o 04? ¿La respuesta? ¡Todos! ¿Ya trabando con fechas y horas parece un poco complicado, no es así? De hecho, hicimos una lectura rápida de todas las referencias de libros de Java en nuestra oficina (cabe señalar) y muy pocos cubren fechas y horas en cualquier forma substancial. Pero no entre en pánico. Solamente acepte el hecho de que, como desarrollador, tendrá que expandir un poco de esfuerzo para satisfacer dos objetivos:

1. Su objetivo externo: Para permitir a los usuarios trabajar con los formatos de fecha y hora con los que se sientan más cómodos o, al menos, con los que más se familiaricen.
2. Su objetivo interno: Conservar el formato de código de su aplicación independiente, de manera que funcione en todas partes con pocas molestias.

Ahora hablemos un poco sobre cada uno de estos objetivos.

El objetivo externo: Se flexible & Use controles estándar.

¿Alguna vez ha notado que algunos sitios web de viajes permiten a los usuarios introducir manualmente la información de la fecha y la hora? Por el contrario, dependan de seleccionador de calendario y determinar un día, mes y año a través de un menú desplegable, o al mínimo esfuerzo un formato de fecha específico (por lo general, unido a su idioma/país, que le piden de antemano). Desde una perspectiva de inteface, sus aplicaciones deberían respetar los matices de las fechas y las horas, al menos en alguna medida. Sin embargo, debería ser cuidadoso al considerar los métodos en los cuales el usuario pueden introducir la información de la fecha y la hora. Al usar el selector estándar para la fecha y la hora en su aplicación de Android, tal como DatePicker y TimePicker, usted limita eficazmente los datos de los usuarios que pueden introducir para que, fácilmente, sean convertidos en una estructura adecuada de fecha y hora, sin tener que pasar cada formato conocido (sin mencionar sus tipos).

Time Picker
Date Picker

El objetivo interno: Conservar las Fechas y Horas genéricas.

Desde una perspectiva de código interno, sus aplicaciones deberían usar una representación genérica de fecha/hora que no depende de estos matices.

En Java, las fechas y horas están almacenadas en varias formas, dependiendo de sus requerimientos.

  • El tipo long es un tipo de datos primitivos capaz de almacenar el número de milisegundos transcurridos desde un punto específico en el tiempo (tiempo Unix).
  • La clase Date (java.util.Date) es igual clase pública para almacenar la fecha y la hora en una forma que puede ser razonablemente manipulada sin tener que pensar constantemente sobre el tiempo en términos de milisegundos.
  • La clase Calendar (java.util.Calendar) es una clase pública para trabajar con diferentes calendarios, así como también para manipular la información de la fecha y la hora en una variedad de formas.
  • La clase GregorianCalendar (una subclase de java.util.Calendar) es usada, principalmente, para la manipulación de la fecha en el hemisferio Oeste, en donde usamos un calendario de 12 meses, con 7 días a la semana y dos épocas (BC y AD).

Determinando la Fecha y Hora actual

Hay varias formas para determinar la fecha actual en un dispositivo Android.

Usted puede determinar la fecha y la hora usando un método estático proporcionado por la clase System (java.lang.System):

Este método depende del tiempo en el cual el dispositivo piensa que está, el cual puede o no ser confiable. Otra forma para determinar la fecha y la hora actual es usando el constructor por defecto para la clase Date, el cual crea un objeto Date con la fecha y la hora actual.

Aún hay otras formas para determinar el verdadero tiempo exacto —las computadoras, con frecuencia conocen bien los servidores que mantienen el tiempo para asegurarse que todo está "in sync". Este proceso está ligeramente más allá del alcance de este tutorial, pero basta decir que, con sólo solicitar y recibir la fecha correcta toma algo de tiempo, lo cual debe ser considerado antes de la sincronización  puede ser logrado.

(Nota: Los dispositivos Android que conectan a servicios de celulares tienden a tener una información de fecha y hora local específica que pueden ser usados en las comunicaciones con las torres de radios).

Creando las variables Fechas y Hora desde cero.

Ahora, que tal si quiere crear una variable para la fecha y la hora desde una fecha específica, como un cumpleaños. Quizás usted sabe puede decir el número de milisegundos desde 1/1/1970 medianoche que representa su cumpleaños. En mi caso, eso sería algo como 229703700 milisegundos, o la mañana del 12 de Abril de 1977 (ajustado para el horario en California). Sin embargo, como puede ver, esto es muy complicado. Realmente, lo que usted quiere hacer es decir: computadora, creame una variable date/time representando Abril 12, 1977. Es ahí donde la clase Calendar entra en juego:

Puede usar objetos calendarios para manipular las fechas y extraer la información interesante sobre ellas. Por ejemplo, puede usar el método get() para determinar el día de la semana en el que nací:

Observe que los meses del calendario están basados en 0, así que Enero es el mes 0  no 1, y por lo tanto; Abril es el mes 3 no el 4. Finalmente, puede extraer el objeto Date desde una configuración de fecha Calendar usando el método getTime().

Formateando los datos de Fecha y Hora

Usted puede usar la clase auxiliar llamada DateFormat (java.text.DateFormat) para convertir la información de la fecha y la hora sin formato en diferentes formatos String (para diferentes ubicaciones, etcétera) o para pasar información String dento de su bits de fecha y hora adecuados para usarlos en el código.

Por ejemplo, puede usar la clase SimpleDateFormat (una subclase de la clasae DateFormat) para crear un string personalizado que contiene la información de la fecha y la hora. Primero, debe especificar su formato string, usando los códigos apropiados para los diferentes bits de información (ver la documentación en detalle de SimpleDateFormat o códigos individuales). Luego, aplique esa información para una fecha y hora específica. Por ejemplo:

Si fuera a imprimir el String llamado formattedDateString, entonces usted podría ver algo como: "Lunes, Diciembre 6 a las 08:34 AM en el año 2010 AD".

Por cierto, también puede usar las clases DateFormat y SimpleDateFormat para pasar los strings de la fecha y la hora dentro de la clase Date apropiada. Ojalá, no gaste mucho tiempo pasando fechas introducidas por los usuarios (que, por lo general, es bastante molesto) pero tener un mecanismo de análisis es útil. Por ejemplo, usted podría pasar timestamps desde un archivo XML donde usted controla o conoce de antemano el formato del timestamp, y por lo tanto, puede generar el formato String adecuado para analizarlo.

Mostrando la información de la Fecha y la Hora al usuario

Hay numerosas maneras de mostrar la información de la fecha y la hora al usuario. La forma que usted escoja depende de sus requerimientos.

Quizás la forma más sencilla es mostrar, simplemente, una fecha u hora específica como un adecuado formato string. Este método tiene más sentido para fijas las fechas o las horas, tal como; cumpleaños o eventos. Simplemente use la clase publica DateFormat para crear un string adecuado y muestrelo en pantalla como lo haría con cualquier otro texto (como dentro de un control de Vista de Texto).

Para mostrar el tiempo pasando, es decir; "en tiempo real", puede usar, ya sea; los controles AnalogClock (ver la figura) o DigitalClock.

An Android Clock Control

Tip: ¿Buscando la hora? Revise el control del cronómetro 

Concluyendo

Las fechas y las horas son tipos de datos importantes con los cuales, los desarrolladores de Java deben de trabajar inevitablemente. Internamente, los dispositivos guardan la información de la fecha y la hora de forma numérica, pero los usuarios interpretan esta información en diferentes formas y usando diferentes formatos. Mantenga estos matices bajo control limitando la forma en como los usuarios puede introducir fechas y horas usando los controles incorporados y asegúrese que su código usa una representación genérica de esta información, por ejemplo; usando una de las muchas clases disponibles para guardar la información de la fecha y la hora.

Acerca de los Autores

Desarrolladores de Mobile; Lauren Darcey y Shane Conder son coautores de varios libros sobre el desarrollo en Android: un libro de programación a fondo titulado: Desarrollo de Aplicaciones Inalámbricas de Android y Sams Aprenda usted mismo a Desarrollar Aplicaciones para Android en 24 horas. Cuando no escriben, ellos pasan su tiempo desarrollando programas para celulares en sus empresas y proporcionando servicios de consultoría. Ellos pueden ser localizado a través de correo electrónico:androidwirelessdev+mt@gmail.com o por medio de su blog en androidbook.blogspot.com y en Twitter @androidwireless.

¿Necesita más ayuda escribiendo aplicaciones de Android? ¡Revise nuestros últimos libros y recursos!

Buy Android Wireless Application Development, 2nd Edition Buy Sam's Teach Yourself Android Application Development in 24 Hours Mamlambo code at Code Canyon

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.