質問

った研究することができなかの日...ここには何か:

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

ください助けにより、吸数、お願い致します。

役に立ちましたか?

解決

あなたが別の時間を持っていない場合は日よりも大きな間隔:

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

あなたも週を持っている場合:

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

これは、可能な場合、彼らは明確に定義された固定長を持っていないとして、月、年を使用しないように、おそらく最善です。日が24時間ではない長さを持つことができることを意味夏時間

:厳密にどちらの日もしない話し。

他のヒント

簡単なような場合、 TimeUnit 使用すること。TimeUnit利用は明確に何が表現されていますが読み書きに比べてすべての演算の計算説明します。例えば、計算には数日間からのミリ秒単位で、以下のステートメントはう:

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

る場合より高度に、より細かい粒度の時間が必要で表されること、包括的な、現代の日付/時刻のAPIを使用すること。のためのJDK8+,java.時間まで区分掲記しておりまし(ここで、 チュートリアルjavadocs).以前のバージョンのJava joda-時間 が固ます。

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;

あなたはのint型を唱えられるが、私は使用することをお勧めします。の長い

場合は、あなたのコード内で実行統計をロギングする、より複雑なタスクを解決します

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。ロガーは、単純なのSystem.out.println()あなたのような場合に置き換えることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top