65

私はいくつかの調査を行いましたが、まだ日を取得する方法を見つけることができません...これが私が得たものです:

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

助けてください、私は数学が苦手です、ありがとう。

4

8 に答える 8

137

このような単純なケースでは、TimeUnitを使用する必要があります。TimeUnitの使用法は、表現されているものについてもう少し明確であり、すべての算術計算を明示的に行う場合と比較すると、読み取りと書き込みがはるかに簡単です。たとえば、ミリ秒から日数を計算するには、次のステートメントが機能します。

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

より高度なケースでは、時間の操作のコンテキストでよりきめ細かい期間を表す必要があり、すべてを網羅した最新の日付/時刻APIを使用する必要があります。JDK8 +の場合、java.timeが含まれるようになりました(チュートリアルjavadocsは次のとおりです)。以前のバージョンのJavaの場合、 joda-timeは確実な代替手段です。

于 2011-10-19T23:57:04.967 に答える
117

日よりも大きな別の時間間隔がない場合:

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 時間ではない可能性があることを意味します。

于 2011-10-19T23:47:57.620 に答える
2
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をキャストすることもできますが、 longを使用することをお勧めします。

于 2016-01-06T19:12:47.567 に答える
2
int days = (int) (milliseconds / 86 400 000 )
于 2011-10-19T23:48:36.267 に答える
1

コードで実行統計をログに記録するというより複雑なタスクを解決する場合:

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).");
}

必要に応じて、PS Logger を単純な System.out.println() に置き換えることができます。

于 2019-01-11T08:02:05.633 に答える