wake-up-neo.com

millisekunden bis Tage

ich habe etwas recherchiert, kann aber noch nicht herausfinden, wie ich die Tage bekomme ...

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 saug an Mathe, danke.

41
Reacen

Wenn Sie kein anderes Zeitintervall als Tage haben:

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

Wenn Sie auch Wochen haben:

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

Es ist wahrscheinlich am besten, wenn möglich, Monate und Jahre zu vermeiden, da sie keine genau definierte feste Länge haben. Genau genommen auch keine Tage: Sommerzeit bedeutet, dass Tage eine Länge haben können, die nicht 24 Stunden beträgt.

84
Mark Byers

In einfachen Fällen wie diesem sollte TimeUnit verwendet werden. Die Verwendung von TimeUnit ist etwas expliziter, was dargestellt wird, und es ist auch viel einfacher zu lesen und zu schreiben, wenn Sie alle arithmetischen Berechnungen explizit ausführen. Um beispielsweise die Anzahl der Tage aus Millisekunden zu berechnen, funktioniert die folgende Anweisung:

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

Für fortgeschrittene Fälle, in denen feinkörnigere Dauern im Zusammenhang mit der Arbeit mit der Zeit dargestellt werden müssen, sollte eine umfassende und moderne Datums-/Zeit-API verwendet werden. Für JDK8 + ist jetzt Java.time enthalten (hier sind die Tutorials und Javadocs ). Für frühere Versionen von Java ist joda-time eine gute Alternative.

114
whaley
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;

Du könntest int gießen, aber ich würde empfehlen, long zu verwenden.

1
Codeversed
int days = (int) (milliseconds / 86 400 000 )
1
Kurtis Nusbaum

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

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. Der Logger kann durch einfaches System.out.println () ersetzt werden, wenn Sie möchten.

0
Zon