En la mayoría de las aplicaciones que construimos, la fecha y la hora es una característica que tendemos a utilizar. Las opciones estándar que ofrece java.util funcionan bien pero no son del todo efectivas y para algo tan básico, tienden a necesitar muchas soluciones personalizadas. Esto introduce posibilidades de errores ya que añadimos mucho código boilerplate en nuestro proyecto. Pero hay soluciones que ya han sido implementadas, y que podemos incorporar fácilmente en nuestras aplicaciones. Estas tienden a hacer el trabajo por nosotros en su mayoría utilizando una sola línea de código.
Por ejemplo con estas librerías podrás realizar fácilmente lo siguiente:
- Obtener la fecha de hoy, ayer, etc.
- Obtener la fecha de dentro de 2 años o del pasado.
- Añadir un número determinado a una fecha dada, etc.
Esto se hace con una sola línea de código. Veamos las librerías:
(a). Tempo
Kotlin intuitivo java.util.Date extensiones.
La forma más fácil de trabajar con la fecha y la hora. A través de Tempo puedes:
- Obtener e inicializar datetime.
- Comparar fechas.
-
- Sumar/restar fechas.
- Mostrar la fecha de una manera amigable y en inglés.
-
- Analizar y dar formato a las fechas, etc.
Paso 1: Instalar Tempo
dependencies {
implementation 'com.github.cesarferreira:tempo:0.7.0'
}
Paso 2: Usar Tempo
Aquí hay un ejemplo de uso de Tempo en Kotlin:
val now: Date = Tempo.now //=> now
now + 1.week //=> next week
now - 2.days //=> day before yesterday
now + (3.weeks - 4.days + 5.hours) //=> somewhere in 2 and a half weeks
Tempo.tomorrow //=> tomorrow
Tempo.yesterday //=> yesterday
1.day.ago //=> yesterday
3.weeks.ago //=> 3 weeks ago
5.years.forward //=> five years in the future
Inicializar especificando los componentes de la fecha
Tempo.with(year = 1990, month = 1, day = 21) //=> 1990/01/21
Tempo.with(year = 2019, month = 6, day = 26, hour = 18, minute = 58, second = 31, millisecond = 777)
Inicializar cambiando los componentes de la fecha
Tempo.now.with(month = 12, day = 25) //=> this year's christmas
Date().with(month = 12, day = 25) //=> this year's christmas
// shortcuts
Tempo.now.beginningOfYear //=> new year's day
Tempo.now.endOfYear //=> new year's eve
Comprobar día de la semana / propiedades
Tempo.now.isMonday
Tempo.now.isTuesday
Tempo.now.isWednesday
Tempo.now.isThursday
Tempo.now.isFriday
Tempo.now.isSaturday
Tempo.now.isSunday
Tempo.now.isWeekend
Tempo.now.isWeekday
Tempo.now.isToday // true
Tempo.tomorrow.isToday // false
Tempo.tomorrow.isTomorrow // true
Tempo.yesterday.isYesterday // true
Formatear y analizar
Así es como se formatean y parsean las fechas usando Tempo:
5.minutes.forward.toString("yyyy-MM-dd HH:mm:ss")
//=> "2019-06-11 12:05:00"
"1988-03-02".toDate("yyyy-MM-dd")
//=> Tempo.with(year = 1988, month = 3, day = 2)
Comparar fechas
Aquí está cómo comparar fechas en kotlin usando Tempo:
1.day.ago > 2.days.ago // true
1.day.ago in 2.days.ago..Tempo.now // true
Referencia
Encuentra la referencia completa aquí.
Kotlin Android DateTime - La forma más fácil de trabajar con la fecha y la hora
Veamos un ejemplo completo de Tempo. Este ejemplo enseñará todo lo que Tempo puede ofrecer.
Paso 1: Instalar tempo
Instalar Tempo como habíamos visto anteriormente.
También habilitaremos ViewBinding en el build.gradle a nivel de la app:
buildFeatures {
viewBinding true
}
ViewBinding nos permitirá referenciar fácilmente los widgets en nuestro código kotlin.
Paso 2: Crear Layout
Nuestro layout tendrá un listview que mostrará nuestros resultados al usuario.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Crear MainActivity
MainActivity es nuestra única actividad en el proyecto. Es muy explicativa:
MainActivity.kt
package info.camposha.mr_tempo_datetime
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.cesarferreira.tempo.*
import info.camposha.mr_tempo_datetime.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private fun createDateExamples(): List<String> {
val examples = listOf(
"------ GET DATE,TIME ----",
"NOW: ${Tempo.now}",
"INITIALIZATION: ${Tempo.with(year = 1990, month = 1, day = 21)}",
"INITIALIZATION: ${Tempo.now.with(month = 12, day = 25)}",
"",
"------- USER FRIENDLY READABLE DATES -------",
"TOMORROW: ${Tempo.tomorrow}",
"YESTERDAY: ${Tempo.yesterday}",
"",
"------- ADD OR SUBTRACT DATES --------",
"1 WEEK FROM NOW: " + (Tempo.now.plus(1.week)),
"1 WEEK AGO: " + Tempo.now.minus(1.week),
"2 DAYS AGO: " + Tempo.now.minus(2.days),
"",
"------ TIME AGO ---------",
"A DAY AGO: ${1.day.ago}",
"3 WEEKS AGO: ${3.weeks.ago}",
"5 YEARS FORWARD: ${5.years.forward}",
"",
"------- SHORTCUTS -----",
"NEW YEAR: ${Tempo.now.beginningOfYear}",
"END OF YEAR: ${Tempo.now.endOfYear}",
"----CHECK DATE-----",
"IS MONDAY: ${Tempo.now.isMonday}",
"IS TUESDAY: ${Tempo.now.isTuesday}",
"IS WEDNESDAY: ${Tempo.now.isWednesday}",
"IS THURSDAY: ${Tempo.now.isThursday}",
"IS FRIDAY: ${Tempo.now.isFriday}",
"IS SATURDAY: ${Tempo.now.isSaturday}",
"IS SUNDAY: ${Tempo.now.isSunday}",
"IS WEEKEND: ${Tempo.now.isWeekend}",
"IS WEEKDAY: ${Tempo.now.isWeekday}",
"",
"------ FORMAT AND PARSE ------",
"${5.minutes.forward.toString("yyyy-MM-dd HH:mm:ss")}",
"${"1988-03-02".toDate("yyyy-MM-dd")}",
"",
"------ COMPARE -------",
"${1.day.ago > 2.days.ago}",
"${1.day.ago in 2.days.ago..Tempo.now}"
)
return examples
}
private fun populateListView(data: List<String>) {
binding.listView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, data)
binding.listView.setOnItemClickListener { _, _, i, _ ->
Toast.makeText(this@MainActivity,data[i],Toast.LENGTH_SHORT).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
populateListView(createDateExamples())
}
}
Ejecutar
Ejecuta el Código en android studio y obtendrás lo siguiente:
Descargar
Descargue el código fuente aquí.
(b). Karamba
Una colección de útiles extensiones de Kotlin para Android.
Karamba no es sólo una librería de datetime, en realidad es una librería de utilidades pero tiene algunas funciones de datetime fáciles de usar junto con algunas funcionalidades comúnmente usadas en el desarrollo de android.
Paso 1: Instalar
Añadir a gradle en allprojects
maven { url 'https://jitpack.io' }
luego agrega esto
implementation 'com.github.matteocrippa:karamba:1.2.0'
Paso 2: Cómo usar Karamba
Karamba
le proporciona una lista de diferentes y útiles extensiones para su proyecto, aquí la lista organizada por el tipo extendido.
General
support(apiVersion)
, lambda que permite ejecutar el código sólo si el SDK actual es el especificadosupportKitkat()
, lambda que comprueba si kitkat está soportado y ejecuta el códigosupportLollipop()
, lambda que comprueba si lollipop está soportado y ejecuta el código
Bitmap
base64()
, produce una representación base64 del mapa de bits actualresize(height, width)
, redimensiona el mapa de bits actual al nuevo formato
Booleano
toggle()
, maneja el bool como un toogle cambiando el valor a uno opuesto, entonces se devuelve el nuevo valor (aún no es posible cambiar esto)random()
, devuelve un valor booleano aleatorio, luego se devuelve el nuevo valor (aún no es posible cambiar esto)
Fecha
- ConvertTo(format)
, convierte la fecha actual a un formato personalizado proporcionado como argumento (por ejemplo,
dd-MM-yy HH:mm`) - toCalendar()
, convierte la fecha actual en
Calendar`. - EsFuturo()`, devuelve true si la fecha está en el futuro
- isPast()`, devuelve true si la fecha está en el pasado
- isToday()`, devuelve si la fecha actual es hoy
- isTomorrow()`, devuelve si la fecha actual es mañana
- isYesterday()`, devuelve si la fecha actual es ayer
today()
, devuelve la fecha de hoy- Mañana()`, devuelve la fecha de mañana
- Ayer()`, devuelve la fecha de ayer
- Hora()`, devuelve la hora de la fecha actual en forma de número
minuto()
, devuelve la fecha actual minutos como númerosecond()
, devuelve la fecha actual de los segundos como número- Mes()`, devuelve la fecha actual del mes como número
- Mes()`, devuelve la fecha actual del mes como un nombre largo
year()
, devuelve la fecha actual del año como un númeroday()
, devuelve la fecha actual del día como un númerodayOfWeek()
, devuelve la fecha actual del día de la semana como número- DayOfWeekName()`, devuelve la fecha actual del día de la semana como una cadena
- Día del año()`, devuelve la fecha actual del día del año como un número
Doble
localCurrency(currency)
, convierte el doble actual al formato de moneda pasado como argumento (ej.EUR
)- CelsiusToFahrenheit()`, convierte el doble actual a fahrenheit
- fahrenheitToCelsius()`, convierte el doble actual a celsius
Dibujable
toBitmap()
, convierte el dibujable actual enBitmap
.
Int
readableDistanceFromMeters()
, convierte una cantidad int de metros en un metro legible, kilómetros de distanciacommaSeparatedId()
, convierte un array de int, en una cadena de elementos separados por comasrandom()
, proporciona un número aleatorio en el rango proporcionado (ej.(0..10).random()
)
Cadena
isValidEmail()
, devuelve si la cadena actual es un correo electrónico válido- EsUrl()`, devuelve si la cadena actual es una url válida
isNumeric()
, devuelve si la cadena actual contiene un númeroisPhoneNumber()
, devuelve si la cadena actual contiene un número de teléfonorandom(lenght)
, devuelve una cadena aleatoria de la longitud proporcionada- ToBitmap()`, convierte la cadena actual en base64 en un mapa de bits
ellipsize(chars)
, ellipsize la cadena actual, truncando la cantidad de caracteres definidatoDate(format)
, convierte la cadena actual en un objetoDate
utilizando el formato proporcionadoplainText()
, elimina todo el formato html de la cadena actualtoCamelCase()
, convierte la cadena actual en camel case
Ver
toBitmap()
, convierte la vista actual enBitmap
.
(c). SimpleDate
Librería Android/Kotlin para formatear la fecha y la hora en formatos comunes.
Paso 1: Instalar
En el nivel de proyecto build.gradle
:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
En el nivel de aplicación build.gradle
:
dependencies {
implementation 'com.github.sidhuparas:SimpleDate:2.1.0'
}
Paso 2: Cómo usar
Puedes utilizar los métodos en un objeto de fecha. A continuación están las funciones disponibles:
Para la fecha y la hora
date
.toDateTimeStandard() // 13 August 2019 21:55:11
.toDateTimeStandardIn12Hours() // 13 August 2019 9:55:11 PM
.toDateTimeStandardInDigits() // 13-08-2019 21:55:11
.toDateTimeStandardInDigitsAnd12Hours() // 13-08-2019 9:55:11 PM
.toDateTimeStandardConcise() // 13 Aug 2019 21:55:11
.toDateTimeStandardConciseIn12Hours() // 13 Aug 2019 9:55:11 PM
.toDateTimeYY() // 13 August 19 21:55:11
.toDateTimeYYIn12Hours() // 13 August 19 9:55:11 PM
.toDateTimeYYInDigits() // 13-08-19 21:55:11
.toDateTimeYYInDigitsAnd12Hours() // 13-08-19 9:55:11 PM
.toDateTimeYYConcise() // 13 Aug 19 21:55:11
.toDateTimeYYConciseIn12Hours() // 13 Aug 19 9:55:11 PM
.toZuluFormat() // 2019-08-19T21:16:55:11.926Z
Para la hora solamente
date
.toTimeStandard() // 21:55:11
.toTimeStandardWithoutSeconds() // 21:55
.toTimeStandardIn12Hours() // 9:55:11 PM
.toTimeStandardIn12HoursWithoutSeconds() // 9:55 PM
Para la fecha solamente
date
.toDateStandard() // 13 August 2019
.toDateStandardConcise() // 13 Aug 2019
.toDateStandardInDigits() // 13-08-2019
.toDateYY() // 13 August 19
.toDateYYConcise() // 13 Aug 19
.toDateYYInDigits() // 13-08-19
.toDateYMD() // 2019 August 13
.toDateYMDConcise() // 2019 Aug 13
.toDateYMDInDigits() // 2019-08-13
.toDateEMd() // Tue, Aug 13
.toDateEMYShort() // Tue, Aug 19
.toDateEMY() // Tuesday, August 2019
Sólo para el día
date.toDay() // Tuesday
Ejemplos
- Kotlin:
val date = Date()
println(date.toDateTimeStandard())
- Java:
Date date = new Date();
System.out.println(SimpleDateKt.toDateTimeStandard(date));
Referencia
Encuentra la referencia completa aquí.
(d). DateTimeUtils
Paso 1: Instalar
La biblioteca DateTimeUtils está disponible en JitPack.
Primero añade la línea de dependencia de JitPack en el archivo build.gradle
de tu proyecto:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Y luego simplemente añade la siguiente línea a la sección dependencies
de tu archivo build.gradle
del módulo de la aplicación:
implementation 'com.github.thunder413:DateTimeUtils:3.0'
Paso 2: Usar
Utiliza DateTimeUtils. Veamos algunos ejemplos.
setTimeZone
setTimeZone
te permite definir tu zona horaria por defecto es UTC
DateTimeUtils.setTimeZone("UTC");
formatDate
formatDate
es un método que te permite convertir el objeto fecha
en cadena
o timeStamp
en fecha y viceversa.
Cadena de fecha a objeto de fecha
// MySQL/SQLite dateTime example
Date date = DateTimeUtils.formatDate("2017-06-13 04:14:49");
// Or also with / separator
Date date = DateTimeUtils.formatDate("2017/06/13 04:14:49");
// MySQL/SQLite date example
Date date = DateTimeUtils.formatDate("2017-06-13");
// Or also with / separator
Date date = DateTimeUtils.formatDate("2017/06/13");
Objeto fecha a cadena de fecha MySQL/SQLite
String date = DateTimeUtils.formatDate(new Date());
timeStamp a objeto Date
Por defecto se considerará el timeStamp en milisegundos, pero en el caso de que hayas recuperado el timeStamp del servidor, que normalmente será en segundos, introduce DateTimeUnits.SECONDS
para indicarle a la función lo siguiente
// Using milliseconds
Date date = DateTimeUtils.formatDate(1497399731000);
// Using seconds (Server timeStamp)
Date date = DateTimeUtils.formatDate(1497399731,DateTimeUnits.SECONDS);
formatWithStyle
formatWithStyle` permite parsear la fecha en formato localizado usando el estilo más común
Objeto fecha a fecha localizada
DateTimeUtils.formatWithStyle(new Date(), DateTimeStyle.FULL); // Tuesday, June 13, 2017
DateTimeUtils.formatWithStyle(new Date(), DateTimeStyle.LONG); // June 13, 2017
DateTimeUtils.formatWithStyle(new Date(), DateTimeStyle.MEDIUM); // Jun 13, 2017
DateTimeUtils.formatWithStyle(new Date(), DateTimeStyle.SHORT); // 06/13/17
Cadena de fecha a fecha localizada
DateTimeUtils.formatWithStyle("2017-06-13", DateTimeStyle.FULL); // Tuesday, June 13, 2017
DateTimeUtils.formatWithStyle("2017-06-13", DateTimeStyle.LONG); // June 13, 2017
DateTimeUtils.formatWithStyle("2017-06-13", DateTimeStyle.MEDIUM); // Jun 13, 2017
DateTimeUtils.formatWithStyle("2017-06-13", DateTimeStyle.SHORT); // 06/13/17
formatWithPattern
formatWithPattern
permite definir tu propio patrón de análisis siguiendo el esquema de `SimpleDateFormat
Cadena de fechas como fuente
DateTimeUtils.formatWithPattern("2017-06-13", "EEEE, MMMM dd, yyyy"); // Tuesday, June 13, 2017
Objeto de fecha como fuente
DateTimeUtils.formatWithPattern(new Date(), "EEEE, MMMM dd, yyyy"); // Tuesday, June 13, 2017
isToday
isToday
Indica si una fecha dada es o no una fecha de hoy
// Date object as source
boolean state = DateTimeUtils.isToday(new Date());
// Date String as source
boolean state = DateTimeUtils.isToday("2017-06-15 04:14:49");
isYesterday
isYesterday
Indica si una fecha dada es o no una fecha de ayer
// Date object as source
boolean state = DateTimeUtils.isYesterday(new Date());
// Date String as source
boolean state = DateTimeUtils.isYestrday("2017-06-15 04:14:49");
Obtener la próxima semana anterior
getPreviousWeekDate/getNextWeekDate
Devuelve la fecha de la semana siguiente o de la anterior a partir de una fecha dada, también permite establecer el día de la semana utilizando la constante del calendario
// Date object as source
Date date = DateTimeUtils.getPreviousWeekDate(new Date(), Calendar.MONDAY);
// Date String as source
Date date = DateTimeUtils.getNextWeekDate("2017-06-15 04:14:49",Calendar.SUNDAY);
Obtener el siguiente mes anterior
getPreviousMonthDate/getNextMonthDate
Devuelve la fecha del mes siguiente o anterior a partir de una fecha dada
// Date object as source
Date date = DateTimeUtils.getNextMonthDate(new Date());
// Date String as source
Date date = DateTimeUtils.getPreviousMonthDate("2017-06-15 04:14:49");
getDateDiff
getDateDiff
te da la diferencia entre dos fechas en días, horas, minutos, segundos o milisegundos DateTimeUnits
// Dates can be date object or date string
Date date = new Date();
String date2 = "2017-06-13 04:14:49";
// Get difference in milliseconds
int diff = DateTimeUtils.getDateDiff(date,date2, DateTimeUnits.MILLISECONDS);
// Get difference in seconds
int diff = DateTimeUtils.getDateDiff(date,date2, DateTimeUnits.SECONDS);
// Get difference in minutes
int diff = DateTimeUtils.getDateDiff(date,date2, DateTimeUnits.MINUTES);
// Get difference in hours
int diff = DateTimeUtils.getDateDiff(date,date2, DateTimeUnits.HOURS);
// Get difference in days
int diff = DateTimeUtils.getDateDiff(date,date2, DateTimeUnits.DAYS);
getTimeAgo
getTimeAgo te da el tiempo transcurrido desde una fecha dada, también ofrece dos modos de impresión: las cadenas completas y las cortas
eg . 3 hours ago | 3h ago` las cadenas están localizadas pero por el momento sólo están disponibles en los idiomas FR y EN. Si necesitas que tu idioma se añada, házmelo saber 🙂
String timeAgo = DateTimeUtils.getTimeAgo(context,new Date()); // Full string style will be used
// Short string style
String timeAgo = DateTimeUtils.getTimeAgo(context,"new Date()",DateTimeStyle.AGO_SHORT_STRING );
formatTime
formatTime
te permite extraer la hora de la fecha por defecto no muestra las horas si es igual a 0
pero puedes suministrar el parámetro forceShowHours
para forzar la visualización de las horas
String time = DateTimeUtils.formatTime(new Date()); // 14:49 if hours equals 0 or 04:14:09 if hours witch is wrong when use it on time rather than a duration
// Solution >> force hours display
String time = DateTimeUtils.formatTime(new Date(),true);
// And you can also supplie a date string
String time = DateTimeUtils.formatTime("2017-06-13 04:14:49"); // 04:14:49
millisToTime
El parámetro millisToTime
es útil cuando se trata de la duración y se quiere mostrar, por ejemplo, la duración del reproductor o la posición actual de la reproducción en un valor legible.
String time = DateTimeUtils.millisToTime(2515); // It take millis as an argument not seconds
timeToMillis
timeToMillis permite convertir la cadena
time en
millseconds`.
int milliseconds = DateTimeUtils.timeToMillis("14:20"); // 860000
Ejemplo
Aquí hay un ejemplo completo:
MainActivity.java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import com.github.thunder413.datetimeutils.DateTimeStyle;
import com.github.thunder413.datetimeutils.DateTimeUnits;
import com.github.thunder413.datetimeutils.DateTimeUtils;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Date date = new Date();
DateTimeUtils.setDebug(true);
Log.d(TAG,"Date To String >> "+DateTimeUtils.formatDate(new Date()));
DateTimeUtils.setTimeZone("GMT");
Log.d(TAG,"Previous month from today >> "+DateTimeUtils.formatDate(DateTimeUtils.getPreviousMonthDate(new Date())));
Log.d(TAG,"Next month from today >> "+DateTimeUtils.formatDate(DateTimeUtils.getNextMonthDate(new Date())));
Log.d(TAG,"Previous >> "+DateTimeUtils.formatDate(DateTimeUtils.getPreviousWeekDate(DateTimeUtils.formatDate(" 2019-05-06 22:32:57"), Calendar.MONDAY)));
Log.d(TAG,"String To Date >> "+DateTimeUtils.formatDate("2017-06-13 04:14:49"));
Log.d(TAG,"IsToDay >> "+DateTimeUtils.isToday(new Date()));
Log.d(TAG,"IsToDay String >> "+DateTimeUtils.isToday("2017-06-15 04:14:49"));
Log.d(TAG,"IsYesterdaY Date >> "+DateTimeUtils.isYesterday(new Date()));
Log.d(TAG,"IsYesterdaY String >> "+DateTimeUtils.isYesterday("2017-06-12 04:14:49"));
Log.d(TAG,"TimeAgo String >> "+DateTimeUtils.getTimeAgo(this,"2017-06-13 04:14:49"));
Log.d(TAG,"TimeAgo Date >> "+DateTimeUtils.getTimeAgo(this,date));
Log.d(TAG,"Diff in milliseconds >> "+DateTimeUtils.getDateDiff(new Date(),DateTimeUtils.formatDate("2017-06-13 04:14:49"), DateTimeUnits.MILLISECONDS));
Log.d(TAG,"Diff in seconds >> "+DateTimeUtils.getDateDiff(new Date(),DateTimeUtils.formatDate("2017-06-13 04:14:49"), DateTimeUnits.SECONDS));
Log.d(TAG,"Diff in minutes >> "+DateTimeUtils.getDateDiff(new Date(),DateTimeUtils.formatDate("2017-06-13 04:14:49"), DateTimeUnits.MINUTES));
Log.d(TAG,"Diff in hours >> "+DateTimeUtils.getDateDiff(new Date(),DateTimeUtils.formatDate("2017-06-13 04:14:49"), DateTimeUnits.HOURS));
Log.d(TAG,"Diff in days >> "+DateTimeUtils.getDateDiff(new Date(),DateTimeUtils.formatDate("2017-06-13 04:14:49"), DateTimeUnits.DAYS));
Log.d(TAG,"Extract time from date >> "+DateTimeUtils.formatTime(new Date()));
Log.d(TAG,"Extract time from dateString >> "+DateTimeUtils.formatTime("2017-06-13 04:14:49"));
Log.d(TAG,"Millis to time >> "+DateTimeUtils.millisToTime(25416660));
Log.d(TAG,"Time to millis >> "+DateTimeUtils.timeToMillis("14:20"));
Log.d(TAG,"Revert Millis to time >> "+DateTimeUtils.millisToTime(860000));
Log.d(TAG,"FormatWithStyle FULL >> "+DateTimeUtils.formatWithStyle(new Date(), DateTimeStyle.FULL));
Log.d(TAG,"FormatWithStyle LONG >> "+DateTimeUtils.formatWithStyle(new Date(), DateTimeStyle.LONG));
Log.d(TAG,"FormatWithStyle MEDIUM >> "+DateTimeUtils.formatWithStyle(new Date(), DateTimeStyle.MEDIUM));
Log.d(TAG,"FormatWithStyle SHORT >> "+DateTimeUtils.formatWithStyle(new Date(), DateTimeStyle.SHORT));
}
}
Referencia
Los Javadocs están disponibles aquí.