una tarjeta reparar reconoce que programa para movil micro forzar formateo formatear desde deja dañada como celular android string date

android - reconoce - reparar tarjeta sd dañada desde el movil



La mejor forma de formatear una fecha relativa a ahora en Android (9)

Estoy creando una función en una aplicación de Android para obtener una fecha arbitraria (pasada, presente o futura) y encuentro la diferencia relativa a ahora.

Tanto mi now como las variables due son longs , y este es mi código:

long now = System.currentTimeMillis(); long due = now + 864000; Log.d("Time in 1 day", DateUtils.getRelativeTimeSpanString(due,now, DateUtils.DAY_IN_MILLIS));

Quiero que la salida sea algo así como yesterday , today , in 4 days o 19/12/2012 . Sin embargo, el resultado actual vuelve in 0 days ...

No quiero que el tiempo aparezca en estas cadenas de fechas.

¿Qué estoy haciendo mal y es el mejor método para formatear fechas en Android?


La mejor forma de formatear una fecha relativa a ahora en Android

Te sugiero que uses JodaTime

Es una biblioteca liviana y práctica, y creo que en realidad es la mejor herramienta para trabajar con instancias de Date.

Y puedes comenzar here .


¡Finalmente he implementado lo que querías ...!

Primero necesitas descargar Joda Time desde aquí

Extraelo en cualquier carpeta y coloca joda-time-2.2.jar en la carpeta androidProject / libs.

Actividad principal

import org.joda.time.DateTime; import org.joda.time.Days; import org.joda.time.Months; import org.joda.time.MutableDateTime; import org.joda.time.Weeks; import android.os.Bundle; import android.app.Activity; import android.util.Log; public class MainActivity extends Activity { private int day ; private int month ; private int year ; private int hour ; private int minute ; private long selectedTimeInMillis; private long currentTimeInMillis; private String strDay =""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); year = 2013; month = 8; day = 10; hour = 15; minute = 28; DateTime selectedTime = new DateTime(year,month,day,hour,minute); selectedTimeInMillis = selectedTime.getMillis(); MutableDateTime epoch = new MutableDateTime(); epoch.setDate(selectedTimeInMillis); //Set to Epoch time DateTime now = new DateTime(); currentTimeInMillis = now.getMillis(); int days = Days.daysBetween(epoch, now).getDays(); int weeks = Weeks.weeksBetween(epoch, now).getWeeks(); int months = Months.monthsBetween(epoch, now).getMonths(); Log.v("days since epoch: ",""+days); Log.v("weeks since epoch: ",""+weeks); Log.v("months since epoch: ",""+months); if(selectedTimeInMillis < currentTimeInMillis) //Past { long yesterdayTimeInMillis = currentTimeInMillis - 86400000; DateTime today = new DateTime(currentTimeInMillis); int year = today.getDayOfYear(); int intToday = today.getDayOfMonth(); DateTime yesterday = new DateTime(yesterdayTimeInMillis); int intYesterday = yesterday.getDayOfMonth(); DateTime selectedDay = new DateTime(selectedTimeInMillis); int intselectedDay = selectedDay.getDayOfMonth(); int intselectedYear = selectedDay.getDayOfYear(); if(intToday == intselectedDay & year == intselectedYear) { strDay = "today"; } else if(intYesterday == intselectedDay) { strDay = "yesterday"; } else { strDay = "before "+ days +" days from today"; } } else if(selectedTimeInMillis > currentTimeInMillis) //Future { long tomorrowTimeInMillis = currentTimeInMillis + 86400000; DateTime tomorrow = new DateTime(tomorrowTimeInMillis); int intTomorrow = tomorrow.getDayOfMonth(); DateTime today = new DateTime(selectedTimeInMillis); int intToday = today.getDayOfMonth(); if(intToday == intTomorrow) { strDay = "tomorrow"; } else { days = -days; strDay = "after "+ days +" days from today"; } } Log.v("strDay: ",""+strDay); } }

Solo necesita cambiar el valor del día y obtendrá el resultado deseado. Actualmente he dado la fecha 10 como entrada, así que la salida será hoy.

He establecido la fecha / día = 10 , mes = 8 , año = 2013 , hora = 15 , min = 28

Para fechas pasadas:

input day 9 output yesterday input day 3 output before 7 days from today input year 2012 and day 10 output before 365 days from today

Para fechas futuras:

input day 11 output tomorrow input day 27 output after 17 days from today input day 23 and year 2016 output after 1109 days from today


¿Por qué no simplemente verificar el yesterday y el tomorrow para evitar la DateUtils.getRelativeTimeSpanString 0 days ago in 0 days / 0 days ago y dejar que DateUtils.getRelativeTimeSpanString maneje los casos restantes?

String relative = null; if(now < due && (due-now)<864000){ relative = "tomorrow"; }else if(now > due && (now-due)<864000){ relative = "yesterday"; }else{ relative = DateUtils.getRelativeTimeSpanString(due, now, DateUtils.DAY_IN_MILLIS); // e.g. "in 4 days" } Log.d("result", relative);

Editar: También puede agregar today con una simple verificación también.


Entonces su cálculo se basa en unidades de milisegundos, luego formatee el resultado con SimpleDateFormat.

Para esto, puede usar fácilmente el formateador SimpleDateFormat así:

Date date = new Date(milliseconds); SimpleDateFormat formatter = new SimpleDateFormat("EEEE dd MMMM yyyy"); String strDate = formatter.format(date);

Entonces su computación debe basarse en unidades de milisegundos, luego formatee el resultado con SimpleDateFormat.

El patrón ("EEEE dd MMMM yyyy") le permite obtener un formato de fecha como el lunes, 4 de febrero de 2013.

Puede cambiar el patrón como desee: "EEEE dd / MM / aa", ...


La razón real es que el número 864000 está en milisegundos, lo que corresponde a 14 minutos. 14 minutos es tan pequeño en comparación con DAY_IN_MILLIS (un día). Allí para obtener "en 0 días". Si desea que se produzca "en 14 minutos", simplemente cambie DAY_IN_MILLIS a MIN_IN_MILLIS.


Lo que tengo en mente es cambiar:

DateUtils.getRelativeTimeSpanString(due, now, 0L, DateUtils.FORMAT_ABBREV_ALL);

Dado que la documentación dice que devuelve el tiempo relativo a ahora.

Si eso falla, use algunas de las geniales bibliotecas:

Joda Time

PrettyTime

TimeAgo


long now = System.currentTimeMillis ();

DateUtils.getRelativeDateTimeString (mContext, ahora), DateUtils.SECOND_IN_MILLIS, DateUtils.DAY_IN_MILLIS, 0)

un enlace !


para Android puedes usar la forma más simple con la biblioteca Joda-Time-Android :

Date yourTime = new Date(); DateTime dateTime = new DateTime(yourTime); //or simple DateTime.now() final String result = DateUtils.getRelativeTimeSpanString(getContext(), dateTime);


build.gradle

compile ''joda-time:joda-time:2.9.9''

Utils.java

private static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MMM dd, yyyy"); private static SimpleDateFormat TIME_FORMAT = new SimpleDateFormat(" ''at'' h:mm aa"); public static String getRelativeDateTimeString(Calendar startDateCalendar) { if (startDateCalendar == null) return null; DateTime startDate = new DateTime(startDateCalendar.getTimeInMillis()); DateTime today = new DateTime(); int days = Days.daysBetween(today.withTimeAtStartOfDay(), startDate.withTimeAtStartOfDay()).getDays(); String date; switch (days) { case -1: date = "Yesterday"; break; case 0: date = "Today"; break; case 1: date = "Tomorrow"; break; default: date = DATE_FORMAT.format(startDateCalendar.getTime()); break; } String time = TIME_FORMAT.format(startDateCalendar.getTime()); return date + time; }

Salida

Yesterday at 9:52 AM Today at 9:52 AM Tomorrow at 9:52 AM Sep 05, 2017 at 9:52 AM