it-swarm-id.com

milidetik dalam hitungan hari

saya melakukan riset, tetapi masih tidak dapat menemukan cara untuk mendapatkan hari-hari ... Inilah yang saya dapatkan:

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

Tolong bantu, saya payah dalam matematika, terima kasih.

41
Reacen

Jika Anda tidak memiliki interval waktu yang lebih besar dari hari:

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

Jika Anda memiliki minggu juga:

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

Mungkin terbaik untuk menghindari menggunakan bulan dan tahun jika memungkinkan, karena mereka tidak memiliki panjang tetap yang jelas. Sebenarnya tidak juga berhari-hari: penghematan siang hari berarti bahwa hari dapat memiliki panjang yang tidak 24 jam.

84
Mark Byers

Untuk kasus sederhana seperti ini, TimeUnit harus digunakan. Penggunaan TimeUnit sedikit lebih eksplisit tentang apa yang diwakili dan juga lebih mudah dibaca dan ditulis bila dibandingkan dengan melakukan semua perhitungan aritmatika secara eksplisit. Misalnya, untuk menghitung jumlah hari dari milidetik, pernyataan berikut akan berfungsi:

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

Untuk kasus yang lebih maju, di mana durasi berbutir lebih halus perlu diwakili dalam konteks bekerja dengan waktu, API tanggal/waktu yang menyeluruh dan modern harus digunakan. Untuk JDK8 +, Java.time sekarang sudah termasuk (berikut adalah tutorial dan javadocs ). Untuk versi Java yang lebih lama joda-time adalah alternatif yang solid.

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;

Anda bisa menggunakan int tapi saya akan merekomendasikan menggunakan long .

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

Jika Anda menyelesaikan tugas yang lebih kompleks untuk mencatat statistik eksekusi dalam kode Anda:

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 dapat diganti dengan System.out.println () yang sederhana jika Anda mau.

0
Zon