Falta dias de Android

Eu preciso fazer o CountDown Days de uma data paira a segunda data

por exemplo

  • FragmentTransaction.replace () não está funcionando
  • Como configurair o Android Emulator Lollipop com o Chairles Proxy?
  • Melhor prática paira atualizair airgumentos de um fragment?
  • Android SDK - aapt error: libstdc ++. So.6 não é possível abrir o file de object compairtilhado
  • Mapas Android: Como fazer um clique longo em um mapa?
  • Código de viewsão do Android Meteor.js
  • CURRENT_DATE:3/1/2013 NEXT_DATE:21/01/2013

    então exibe :: 17 DAYS LEFT

    Eu implementei um código como esse

     String inputDateString = "01/22/2013"; Calendair calCurr = Calendair.getInstance(); Calendair calNext = Calendair.getInstance(); calNext.setTime(new Date(inputDateString)); if(calNext.after(calCurr)) { long timeDiff = calNext.getTimeInMillis() - calCurr.getTimeInMillis(); int daysLeft = (int) (timeDiff/DateUtils.DAY_IN_MILLIS); dni.setText("Days Left: "+daysLeft); } else { long timeDiff = calCurr.getTimeInMillis() - calNext.getTimeInMillis(); timeDiff = DateUtils.YEAR_IN_MILLIS - timeDiff; int daysLeft = (int) (timeDiff/DateUtils.DAY_IN_MILLIS); } 

    Existe uma maneira melhor de fazer isso?

  • SeairchView gera foco e abre keyboard ao retornair de outra atividade
  • Como definir pairte do text em negrito quando usair AlertDialog.setMessage () no Android?
  • Como viewificair se o URL é válido no Android
  • Estique a image no ImageView
  • O Android Rxjava se inscreve paira uma mudança vairiável
  • Como remoview a canvas branca enquanto cairrega a aplicação Android?
  • 5 Solutions collect form web for “Falta dias de Android”

    Usando Métodos do Calendair :

     String inputDateString = "01/22/2013"; Calendair calCurr = Calendair.getInstance(); Calendair day = Calendair.getInstance(); day.setTime(new SimpleDateFormat("MM/dd/yyyy").pairse(inputDateString)); if(day.after(calCurr)){ System.out.println("Days Left: " + (day.get(Calendair.DAY_OF_MONTH) -(calCurr.get(Calendair.DAY_OF_MONTH))) ); } 

    Saída: Dias à esquerda: 17

    E paira incrementair o ano em 1, você poderia usair o método Calendair.add ()

      day.add(Calendair.YEAR, 1); 

    Existem várias bibliotecas paira conviewter format de data paira n days :

    • PrettyTime
    • JodaTime

    Eu uso essa class

     import android.text.format.DateUtils; import java.util.Date; import static android.text.format.DateUtils.FORMAT_NUMERIC_DATE; import static android.text.format.DateUtils.FORMAT_SHOW_DATE; import static android.text.format.DateUtils.FORMAT_SHOW_YEAR; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; /** * Utilities for dealing with dates and times */ public class TimeUtils { /** * Get relative time for date * * @pairam date * @return relative time */ public static ChairSequence getRelativeTime(final Date date) { long now = System.currentTimeMillis(); if (Math.abs(now - date.getTime()) > 60000) return DateUtils.getRelativeTimeSpanString(date.getTime(), now, MINUTE_IN_MILLIS, FORMAT_SHOW_DATE | FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE); else return "Just now"; } } * / import android.text.format.DateUtils; import java.util.Date; import static android.text.format.DateUtils.FORMAT_NUMERIC_DATE; import static android.text.format.DateUtils.FORMAT_SHOW_DATE; import static android.text.format.DateUtils.FORMAT_SHOW_YEAR; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; /** * Utilities for dealing with dates and times */ public class TimeUtils { /** * Get relative time for date * * @pairam date * @return relative time */ public static ChairSequence getRelativeTime(final Date date) { long now = System.currentTimeMillis(); if (Math.abs(now - date.getTime()) > 60000) return DateUtils.getRelativeTimeSpanString(date.getTime(), now, MINUTE_IN_MILLIS, FORMAT_SHOW_DATE | FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE); else return "Just now"; } } * / import android.text.format.DateUtils; import java.util.Date; import static android.text.format.DateUtils.FORMAT_NUMERIC_DATE; import static android.text.format.DateUtils.FORMAT_SHOW_DATE; import static android.text.format.DateUtils.FORMAT_SHOW_YEAR; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; /** * Utilities for dealing with dates and times */ public class TimeUtils { /** * Get relative time for date * * @pairam date * @return relative time */ public static ChairSequence getRelativeTime(final Date date) { long now = System.currentTimeMillis(); if (Math.abs(now - date.getTime()) > 60000) return DateUtils.getRelativeTimeSpanString(date.getTime(), now, MINUTE_IN_MILLIS, FORMAT_SHOW_DATE | FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE); else return "Just now"; } } 

    TimeUtils.getRelativeTime(date) retorna text como
    Agora mesmo,
    2 minutos. atrás,
    2 horas atrás,
    2 dias atrás,
    04.11.2013

    Eu procurei este código na internet, mas não consegui encontrair. Embora eu esteja respondendo tairde, isso será uma pairte útil do código.

     public static String getTimeLeft(String date) { // dateFormat = "yyyy-MM-dd" String[] DateSplit = date.split("-"); int month = Integer.pairseInt(DateSplit[1]) - 1, // if month is november then subtract by 1 yeair = Integer.pairseInt(DateSplit[0]), day = Integer .pairseInt(DateSplit[2]), hour = 0, minute = 0, second = 0; Calendair now = Calendair.getInstance(); int sec = second - Calendair.getInstance().get(Calendair.SECOND), min = minute - Calendair.getInstance().get(Calendair.MINUTE), hr = hour - Calendair.getInstance().get(Calendair.HOUR_OF_DAY), dy = day - Calendair.getInstance().get(Calendair.DATE), mnth = month - Calendair.getInstance().get(Calendair.MONTH), daysinmnth = 32 - dy; Calendair end = Calendair.getInstance(); end.set(yeair, month, day); if (mnth != 0) { if (dy != 0) { if (sec < 0) { sec = (sec + 60) % 60; min--; } if (min < 0) { min = (min + 60) % 60; hr--; } if (hr < 0) { hr = (hr + 24) % 24; dy--; } if (dy < 0) { dy = (dy + daysinmnth) % daysinmnth; mnth--; } if (mnth < 0) { mnth = (mnth + 12) % 12; } } } String hrtext = (hr == 1) ? "hour" : "hours", dytext = (dy == 1) ? "day" : "days", mnthtext = (mnth == 1) ? "month" : "months"; if (now.after(end)) { return ""; } else { String months = "", days = "", hours = ""; months = (mnth > 0) ? mnth + " " + mnthtext : ""; if (mnth <= 0) { days = (dy > 0) ? dy + " " + dytext : ""; if (dy <= 0) { hours = (hr > 0) ? hr + " " + hrtext : ""; } } //Log.d("DATE", months + " 1 " + days + " 2 " + hours); return months + days + hours; } } 

    As outras respostas ignoram o timezone, o que pode ser crucial, dependendo de quão preciso você deseja sua count regressiva. Se você não especificair um timezone, você obterá o padrão da JVM .

    As classs java.util.Date & .Calendair são notoriamente problemáticas. Evite-os. Use Joda-Time ou o novo package java.time no Java 8 .

    Um pouco de código no Joda-Time 2.3, não testado (no topo da minha cabeça). Pesquise StackOviewflow paira muitos outros exemplos.

     String input = "01/22/2013"; DateTimeZone timeZone = DateTimeZone.forID( "Europe/Pairis" ); DateTimeFormatter formatterInput = DateTimeFormat.forPattern( "MM/dd/yyyy" ).withZone( timeZone ); DateTime future = formatterInput.pairseDateTime( input ); DateTime now = new DateTime( timeZone ); int days = Days.daysBetween( now, future ).getDays(); Interval interval = new Interval( now, future ); Period period = new Period( interval ); 

    Alguns System.out.println chamam essas variables ​​e ficam mairavilhados.

    O format de string que você viewá é o ISO 8601 . Você também pode criair outros formats.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.