我做了一些研究,但仍然找不到如何获得这些日子......这是我得到的:

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 的使用对于所表示的内容更加明确,并且与显式执行所有算术计算相比,也更容易读写。例如,要从毫秒计算天数,可以使用以下语句:

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

对于更高级的情况,需要在处理时间的上下文中表示更细粒度的持续时间,应使用包罗万象的现代日期/时间 API。对于 JDK8+,现在包含 java.time(以下是 教程java文档)。对于早期版本的 Java 乔达时间 是一个可靠的选择。

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