Frage

ich einige der Forschung getan hat, aber immer noch nicht, wie man die Tage bekommen ... Hier ist, was ich habe:

int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours   = (int) ((milliseconds / (1000*60*60)) % 24);
int days = ????? ;

Bitte helfen Sie, ich sauge an Mathe, viele Jahre.

War es hilfreich?

Lösung

Wenn Sie nicht über ein anderes Zeitintervall größer als Tage:

int days = (int) (milliseconds / (1000*60*60*24));

Wenn Sie Wochen haben auch:

int days = (int) ((milliseconds / (1000*60*60*24)) % 7);
int weeks = (int) (milliseconds / (1000*60*60*24*7));

Es ist wahrscheinlich am besten mit Monaten und Jahren zu vermeiden, wenn möglich, da sie nicht über eine gut definierte feste Länge. Genau genommen tut weder Tage: Tageslicht Mittel Einsparung dass Tage können eine Länge haben, die nicht mehr als 24 Stunden

.

Andere Tipps

Für einfache Fälle wie diese, Timeunit sollte benutzt. Timeunit Nutzung ist ein bisschen mehr explizit über das, was dargestellt wird, und ist auch viel einfacher zu lesen und zu schreiben, wenn im Vergleich zu explizit alle der arithmetischen Berechnungen zu tun. Um zum Beispiel der Anzahl Tage von Millisekunden zu berechnen, würde die folgende Anweisung arbeiten:

    long days = TimeUnit.MILLISECONDS.toDays(milliseconds);

Für die Fälle weiter fortgeschritten ist, wo mehr feinkörnige Dauern müssen im Zusammenhang dargestellt werden von mit der Zeit arbeiten, ein allumfassender und moderner Datum / Zeit-API verwendet werden soll. Für JDK8 + wird java.time nun enthalten (hier sind die Tutorials und javadocs ). Für frühere Versionen von Java joda Zeit eine solide Alternative ist.

int days = (int) (milliseconds / 86 400 000 )
public static final long SECOND_IN_MILLIS = 1000;
public static final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60;
public static final long HOUR_IN_MILLIS = MINUTE_IN_MILLIS * 60;
public static final long DAY_IN_MILLIS = HOUR_IN_MILLIS * 24;
public static final long WEEK_IN_MILLIS = DAY_IN_MILLIS * 7;

Sie könnten werfen int , aber ich würde empfehlen die Verwendung von lang .

Im Fall lösen Sie eine komplexere Aufgabe der Protokollierung Ausführungsstatistiken in Ihrem Code:

public void logExecutionMillis(LocalDateTime start, String callerMethodName) {

  LocalDateTime end = getNow();
  long difference = Duration.between(start, end).toMillis();

  Logger logger = LoggerFactory.getLogger(ProfilerInterceptor.class);

  long millisInDay = 1000 * 60 * 60 * 24;
  long millisInHour = 1000 * 60 * 60;
  long millisInMinute = 1000 * 60;
  long millisInSecond = 1000;

  long days = difference / millisInDay;
  long daysDivisionResidueMillis = difference - days * millisInDay;

  long hours = daysDivisionResidueMillis / millisInHour;
  long hoursDivisionResidueMillis = daysDivisionResidueMillis - hours * millisInHour;

  long minutes = hoursDivisionResidueMillis / millisInMinute;
  long minutesDivisionResidueMillis = hoursDivisionResidueMillis - minutes * millisInMinute;

  long seconds = minutesDivisionResidueMillis / millisInSecond;
  long secondsDivisionResidueMillis = minutesDivisionResidueMillis - seconds * millisInSecond;

  logger.info(
      "\n************************************************************************\n"
          + callerMethodName
          + "() - "
          + difference
          + " millis ("
          + days
          + " d. "
          + hours
          + " h. "
          + minutes
          + " min. "
          + seconds
          + " sec."
          + secondsDivisionResidueMillis
          + " millis).");
}

P. S. Logger kann mit einfacher System.out.printin ersetzt werden (), wenn Sie möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top