Respuestas:
Utilice la clase estándar Java DateFormat.
Por ejemplo, para mostrar la fecha y hora actuales, haga lo siguiente:
Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Puede inicializar un objeto Date con sus propios valores, sin embargo, debe tener en cuenta que los constructores han quedado en desuso y realmente debería estar usando un objeto Java Calendar.
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
el formato de fecha devuelto es de tipo java.text.DateFormat
(y NO android.text.format.DateFormat
)
En mi opinión, android.text.format.DateFormat.getDateFormat(context)
me confunde porque este método devuelve en java.text.DateFormat
lugar de android.text.format.DateFormat
- - ".
Entonces, utilizo el código de fragmento como se muestra a continuación para obtener la fecha / hora actual en mi formato.
android.text.format.DateFormat df = new android.text.format.DateFormat();
df.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date());
or
android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date());
Además, puede usar otros formatos. Sigue a DateFormat .
hh:mm:ss
le dará 01:00:00
para la 1 PM, tendrá que usar kk:mm:ss
para obtener13:00:00
k
es la hora del día (1-24), no quiere decir H
, que es la hora del día (0-23), por ejemplo. HH: mm: ss? Ver: developer.android.com/reference/java/text/SimpleDateFormat.html
java.text.SimpleDateFormat
(lo que vinculó y usa H
durante horas en el rango de 0-23) y android.text.format.DateFormat
(de qué trata la respuesta y lo que usa k
durante horas en el rango de
k
, sin embargo, la documentación de los DateFormat
estados claros. Para la documentación canónica de las cadenas de formato, vea SimpleDateFormat. Muy confuso. ¿O me estoy perdiendo algo?
Puedes usar DateFormat
. El resultado depende de la configuración regional predeterminada del teléfono, pero también puede especificar la configuración regional:
https://developer.android.com/reference/java/text/DateFormat.html
Esto es resultados en un
DateFormat.getDateInstance().format(date)
FR Locale: 3 nov. 2017
US / En Locale: 12 de enero de 1952
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
FR Local: 03/11/2017
US / En Locale: 12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR Locale: 3 nov. 2017
US / En Locale: 12 de enero de 1952
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR Local: 3 de noviembre de 2017
US / En Locale: 12 de enero de 1952
DateFormat.getDateInstance(DateFormat.FULL).format(date)
FR Locale: vendredi 3 de noviembre de 2017
US / En Locale: martes 12 de abril de 1952
DateFormat.getDateTimeInstance().format(date)
FR Locale: 3 nov. 2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)
FR Local: 03/11/2017 16:04
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)
FR Local: 03/11/2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)
FR Local: 03/11/2017 16:04:58 GMT + 01: 00
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)
FR Local: 03/11/2017 16:04:58 heure normale d'Europe centrale
DateFormat.getTimeInstance().format(date)
FR Locale: 16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
FR Locale: 16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
FR Locale: 16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
FR Local: 16:04:58 GMT + 01: 00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR Local: 16:04:58 heure normale d'Europe centrale
Fecha para localizar la cadena de fecha:
Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);
Opciones:
DateFormat.getDateInstance()
-> 31 de diciembre de 1969
DateFormat.getDateTimeInstance()
-> 31 de diciembre de 1969 4:00:00 p.m.
DateFormat.getTimeInstance()
-> 4:00:00 PM
Esto lo hará:
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));
Utilice SimpleDateFormat
Me gusta esto:
event.putExtra("starttime", "12/18/2012");
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date date = format.parse(bundle.getString("starttime"));
new SimpleDateFormat("my-format", Locale.getDefault());
Después de esto: http://developer.android.com/reference/android/text/format/Time.html
Es mejor usar la clase Time nativa de Android:
Time now = new Time();
now.setToNow();
Luego formatee:
Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
Use estos dos como variables de clase:
public java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private Calendar mDate = null;
Y úsalo así:
mDate = Calendar.getInstance();
mDate.set(year,months,day);
dateFormat.format(mDate.getTime());
Este es mi método, puedes definir un formato de entrada y salida.
public static String formattedDateFromString(String inputFormat, String outputFormat, String inputDate){
if(inputFormat.equals("")){ // if inputFormat = "", set a default input format.
inputFormat = "yyyy-MM-dd hh:mm:ss";
}
if(outputFormat.equals("")){
outputFormat = "EEEE d 'de' MMMM 'del' yyyy"; // if inputFormat = "", set a default output format.
}
Date parsed = null;
String outputDate = "";
SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, java.util.Locale.getDefault());
SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, java.util.Locale.getDefault());
// You can set a different Locale, This example set a locale of Country Mexico.
//SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, new Locale("es", "MX"));
//SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, new Locale("es", "MX"));
try {
parsed = df_input.parse(inputDate);
outputDate = df_output.format(parsed);
} catch (Exception e) {
Log.e("formattedDateFromString", "Exception in formateDateFromstring(): " + e.getMessage());
}
return outputDate;
}
Utilizo SimpleDateFormat sin un patrón personalizado para obtener la fecha y hora reales del sistema en el formato preseleccionado del dispositivo :
public static String getFormattedDate() {
//SimpleDateFormat called without pattern
return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}
devuelve :
Utilice construir en clase de tiempo!
Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));
Las otras respuestas son generalmente correctas. Me gustaría contribuir con la respuesta moderna. Las clases Date
, DateFormat
y se SimpleDateFormat
utilizan en la mayoría de las otras respuestas, están desactualizadas y han causado problemas a muchos programadores durante muchos años. Hoy tenemos mucho mejor en java.time
AKA JSR-310, la moderna API de fecha y hora de Java. ¿Puedes usar esto en Android todavía? ¡Seguramente! Las clases modernas se han trasportado a Android en el proyecto ThreeTenABP. Vea esta pregunta: Cómo usar ThreeTenABP en Android Project para todos los detalles.
Este fragmento debe ayudarlo a comenzar:
int year = 2017, month = 9, day = 28, hour = 22, minute = 45;
LocalDateTime dateTime = LocalDateTime.of(year, month, day, hour, minute);
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(dateTime.format(formatter));
Cuando configuro el idioma preferido de mi computadora en inglés de EE. UU. O inglés de Reino Unido, esto imprime:
Sep 28, 2017 10:45:00 PM
Cuando, en cambio, lo configuro en danés, obtengo:
28-09-2017 22:45:00
Entonces sigue la configuración. Sin embargo, no estoy seguro de qué detalle sigue la configuración de fecha y hora de su dispositivo, y esto puede variar de un teléfono a otro.
¡Este código funciona para mí!
Date d = new Date();
CharSequence s = android.text.format.DateFormat.format("MM-dd-yy hh-mm-ss",d.getTime());
Toast.makeText(this,s.toString(),Toast.LENGTH_SHORT).show();
Para obtener la fecha o la hora en formato local de milisegundos, utilicé esto:
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault());
dateFormat.format(date);
Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);
Puede usar otro estilo de fecha y estilo de hora. Más información sobre estilos aquí .
Camino más corto:
// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())
%tR
es la abreviatura de %tH:%tM
, <
significa reutilizar el último parámetro ( 1$
).
Es equivalente a String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())
https://developer.android.com/reference/java/util/Formatter.html
Tratar:
event.putExtra("startTime", "10/05/2012");
Y cuando accede a variables pasadas:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));
Lo uso así:
public class DateUtils {
static DateUtils instance;
private final DateFormat dateFormat;
private final DateFormat timeFormat;
private DateUtils() {
dateFormat = android.text.format.DateFormat.getDateFormat(MainApplication.context);
timeFormat = android.text.format.DateFormat.getTimeFormat(MainApplication.context);
}
public static DateUtils getInstance() {
if (instance == null) {
instance = new DateUtils();
}
return instance;
}
public synchronized static String formatDateTime(long timestamp) {
long milliseconds = timestamp * 1000;
Date dateTime = new Date(milliseconds);
String date = getInstance().dateFormat.format(dateTime);
String time = getInstance().timeFormat.format(dateTime);
return date + " " + time;
}
}
Java.util.Date y .Calendar y SimpleDateFormat en Java (y Android) son notoriamente problemáticos. Evítales. Son tan malos que Sun / Oracle los abandonó, reemplazándolos con el nuevo paquete java.time en Java 8 (no en Android a partir de 2014). El nuevo java.time
fue inspirado por el Joda-Time biblioteca .
Joda-Time funciona en Android.
Busque StackOverflow para "Joda" para encontrar muchos ejemplos y mucha discusión.
Un tidbit de código fuente usando Joda-Time 2.4.
Formato estandar.
String output = DateTime.now().toString();
// Current date-time in user's default time zone with a String representation formatted to the ISO 8601 standard.
Formato localizado
String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() );
// Full (long) format localized for this user's language and culture.
En 2016, cuando quiero personalizar el formato (no de acuerdo con la configuración del dispositivo, como usted pregunta ...), generalmente uso el archivo de recursos de cadena:
en strings.xml:
<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>
En actividad:
Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));
Esto también es útil con el lanzamiento de la nueva Biblioteca de enlace de fechas .
Entonces puedo tener algo como esto en el archivo de diseño:
<TextView
android:id="@+id/text_release_date"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:padding="2dp"
android:text="@{@string/myDateFormat(vm.releaseDate)}"
tools:text="0000"
/>
Y en clase java:
MovieDetailViewModel vm = new MovieDetailViewModel();
vm.setReleaseDate(new Date());
La clase Time de Android proporciona 3 métodos de formato http://developer.android.com/reference/android/text/format/Time.html
Así es como lo hice:
/**
* This method will format the data from the android Time class (eg. myTime.setToNow()) into the format
* Date: dd.mm.yy Time: hh.mm.ss
*/
private String formatTime(String time)
{
String fullTime= "";
String[] sa = new String[2];
if(time.length()>1)
{
Time t = new Time(Time.getCurrentTimezone());
t.parse(time);
// or t.setToNow();
String formattedTime = t.format("%d.%m.%Y %H.%M.%S");
int x = 0;
for(String s : formattedTime.split("\\s",2))
{
System.out.println("Value = " + s);
sa[x] = s;
x++;
}
fullTime = "Date: " + sa[0] + " Time: " + sa[1];
}
else{
fullTime = "No time data";
}
return fullTime;
}
Espero que sea útil :-)
Es muy tarde pero puede ayudar a alguien
DateFormat.format(format, timeInMillis);
aquí format
está el formato que necesitas
Ej: "HH: mm" devuelve 15:30