puedo poner pantalla hora funciona fecha celular cambiar automaticamente automatica ajustar actualizar android date time formatting format

poner - ¿Cómo formateas fecha y hora en Android?



no puedo cambiar la fecha y hora de mi android (21)

Evite juDate

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ó, suplantándolos con el nuevo paquete java.time en Java 8 (no en Android a partir de 2014). El nuevo java.time se inspiró en la biblioteca Joda-Time .

Tiempo de joda

Joda-Time funciona en Android.

Busque en StackOverflow "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.

¿Cómo se formatea correctamente de acuerdo con la configuración del dispositivo, la fecha y la hora cuando se tiene año, mes, día, hora y minuto?


Lugar

Para obtener la fecha o la hora en formato de configuración regional de milisegundos, utilicé esto:

Fecha y hora

Date date = new Date(milliseconds); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault()); dateFormat.format(date);

Fecha

Date date = new Date(milliseconds); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault()); dateFormat.format(date);

Hora

Date date = new Date(milliseconds); DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault()); dateFormat.format(date);

Puede utilizar otro estilo de fecha y estilo de hora. Más información sobre los estilos here .


SimpleDateFormat

Uso SimpleDateFormat sin un patrón personalizado para obtener la fecha y la 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 :

  • 13.01.15 11:45
  • 13/01/15 10:45 AM
  • ...

¡Usa build en la clase Time!

Time time = new Time(); time.set(0, 0, 17, 4, 5, 1999); Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));


Cadena de fecha de fecha a configuración regional:

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 PM

DateFormat.getTimeInstance()

-> 4:00:00 PM


De vuelta a 2016, cuando quiero personalizar el formato (no de acuerdo con la configuración del dispositivo, como usted pregunta ...) Usualmente 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 fecha .

Así que 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());


En mi opinión, android.text.format.DateFormat.getDateFormat(context) me confunde porque este método devuelve java.text.DateFormat lugar de android.text.format.DateFormat - - ".

Por lo tanto, uso el código del 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 utilizar otros formatos. Siga DateFormat .


Es demasiado tarde pero puede ayudar a alguien

DateFormat.format(format, timeInMillis);

Aquí el format es el formato que necesitas.

Ej: "HH: mm" vuelve 15:30


Este código devolvería la fecha y hora actual:

public String getCurrDate() { String dt; Date cal = Calendar.getInstance().getTime(); dt = cal.toLocaleString(); return dt; }


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();


Este es mi método, se puede definir y el 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; }


Esto lo hará:

Date date = new Date(); java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); mTimeText.setText("Time: " + dateFormat.format(date));


La clase de tiempo 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 de ayuda :-)


Las otras respuestas son generalmente correctas. Me gustaría aportar la respuesta moderna. Las clases Date , DateFormat y SimpleDateFormat utilizadas en la mayoría de las otras respuestas, son obsoletas desde hace mucho tiempo y han causado problemas a muchos programadores durante muchos años. Hoy tenemos mucho mejor en java.time , también conocido como JSR-310, la moderna API de fecha y hora de Java. ¿Puedes usar esto en Android todavía? ¡Seguramente! Las clases modernas han sido backportadas a Android en el proyecto ThreeTenABP. Vea esta pregunta: Cómo usar ThreeTenABP en el proyecto de Android para todos los detalles.

Este fragmento debe ayudarte 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 del Reino Unido, esto imprime:

Sep 28, 2017 10:45:00 PM

Cuando en cambio lo puse en danés, obtengo:

28-09-2017 22:45:00

Así que sigue la configuración. Sin embargo, no estoy seguro de a qué detalle sigue la configuración de fecha y hora de su dispositivo, y esto puede variar de un teléfono a otro.


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; } }


Puede utilizar 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

Estos son los resultados en un teléfono en francés Locale:

DateFormat.getDateInstance().format(date)

==> 3 nov 2017

DateFormat.getDateInstance(DateFormat.SHORT).format(date)

==> 03/11/2017

DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)

==> 3 nov. 2017

DateFormat.getDateInstance(DateFormat.LONG).format(date)

==> 3 de noviembre de 2017

DateFormat.getDateInstance(DateFormat.FULL).format(date)

==> vendredi 3 novembre 2017

DateFormat.getDateTimeInstance().format(date)

==> 3 nov. 2017 16:04:58

DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)

==> 03/11/2017 16:04

DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)

==> 03/11/2017 16:04:58

DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)

==> 03/11/2017 16:04:58 GMT + 01: 00

DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)

==> 03/11/2017 16:04:58 heure normale d''Europe centrale

DateFormat.getTimeInstance().format(date)

==> 16:04:58

DateFormat.getTimeInstance(DateFormat.SHORT).format(date)

==> 16:04

DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)

==> 16:04:58

DateFormat.getTimeInstance(DateFormat.LONG).format(date)

==> 16:04:58 GMT + 01: 00

DateFormat.getTimeInstance(DateFormat.FULL).format(date)

==> 16:04:58 heure normale d''Europe centrale



Tratar:

event.putExtra("startTime", "10/05/2012");

Y cuando estás accediendo a variables pasadas:

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); Date date = formatter.parse(bundle.getString("startTime"));


Utilice 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());


Utilice la clase estándar de Java DateFormat.

Por ejemplo, para mostrar la fecha y hora actual, 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 que realmente debería estar usando un objeto Java Calendar.


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"));