Domanda

Ho fatto qualche ricerca, ma ancora non riesco a trovare il modo di ottenere i giorni ... Ecco quello che ho ottenuto:

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

Si prega di aiuto, faccio schifo in matematica, grazie di.

È stato utile?

Soluzione

Se non si dispone di un altro intervallo di tempo più grande di giorni:

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

Se si dispone di settimane anche:

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

E 'probabilmente meglio evitare di usare mesi e anni, se possibile, in quanto non hanno una lunghezza fissa ben definito. Strettamente parlando nemmeno giorni: la luce del giorno significa che i giorni possono avere una lunghezza che non è di 24 ore il risparmio

.

Altri suggerimenti

Per i casi semplici come questo, TIMEUNIT dovrebbe essere Usato. utilizzo TIMEUNIT è un po 'più esplicito su ciò che viene rappresentato ed è anche molto più facile da leggere e scrivere, rispetto a fare tutti i calcoli aritmetici in modo esplicito. Ad esempio, per calcolare il numero di giorni dalla millisecondi, la seguente dichiarazione avrebbe funzionato:

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

Per i casi più avanzati, dove hanno bisogno di essere rappresentati nel contesto di lavorare con il tempo, un onnicomprensivo e moderna data / ora API deve essere utilizzato durate più grana fine. Per JDK8 +, java.time è ora incluso (qui sono i tutorial e javadocs ). Per le versioni precedenti di Java Joda tempo è una solida alternativa.

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;

Si potrebbe lanciare int , ma mi consiglia di utilizzare molto .

Nel caso in cui risolvere un compito più complesso di statistiche di esecuzione di registrazione nel codice:

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 può essere sostituito con una semplice System.out.println (), se vi piace.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top