Saya perlu mengubah jumlah milidetik yang sewenang-wenang menjadi Hari, Jam, Menit Detik.
Misalnya: 10 Hari, 5 jam, 13 menit, 1 detik.
date
time
string-formatting
datetime-format
FlySwat
sumber
sumber
Jawaban:
Nah, karena tidak ada orang lain yang melangkah, saya akan menulis kode mudah untuk melakukan ini:
Saya senang Anda berhenti pada hari-hari dan tidak meminta berbulan-bulan. :)
Perhatikan bahwa di atas, diasumsikan itu
/
mewakili pembagian integer pemotongan. Jika Anda menggunakan kode ini dalam bahasa yang/
merepresentasikan pembagian floating point, Anda perlu memotong hasil pembagian secara manual sesuai kebutuhan.sumber
Misalkan A adalah jumlah milidetik. Maka Anda memiliki:
dan seterusnya (
%
adalah operator modulus).Semoga ini membantu.
sumber
/
melakukan pembagian floating point, Anda perlu memotong nilainya. Diasumsikan dalam jawaban lain yang/
melakukan pembagian integer.Kedua solusi di bawah ini menggunakan javascript (saya tidak tahu solusinya adalah bahasa agnostik!). Kedua solusi perlu diperpanjang jika merekam durasi
> 1 month
.Solusi 1: Gunakan objek Tanggal
Memberikan:
Perpustakaan sangat membantu, tetapi mengapa menggunakan perpustakaan ketika Anda dapat menemukan kembali roda! :)
Solusi 2: Tulis parser Anda sendiri
Membuat objek "durasi", dengan bidang apa pun yang Anda butuhkan. Memformat stempel waktu menjadi sederhana ...
Memberikan:
sumber
return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
var nonZero = function(u){ return !u.startsWith("0"); }; // convert object to a string representation... dur.toString = function(){ return units.reverse().map(function(u){ return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label); }).filter(nonZero).join(', '); };
Apache Commons Lang memiliki DurationFormatUtils yang memiliki metode yang sangat membantu seperti formatDurationWords .
sumber
Anda harus menggunakan fungsi datetime dari bahasa apa pun yang Anda gunakan, tetapi, berikut kodenya hanya untuk bersenang-senang:
sumber
Ini adalah metode yang saya tulis. Dibutuhkan
integer milliseconds value
dan mengembalikanhuman-readable String
:sumber
sumber
Saya akan menyarankan menggunakan fungsi tanggal / waktu / perpustakaan apa pun yang disediakan oleh bahasa / kerangka kerja pilihan Anda. Periksa juga fungsi pemformatan string karena sering memberikan cara mudah untuk melewatkan tanggal / cap waktu dan menghasilkan format string yang dapat dibaca manusia.
sumber
Pilihan Anda sederhana:
sumber
sumber
Ini harus mencetak: 0.0: 1: 9
sumber
Mengapa tidak melakukan sesuatu seperti ini:
var ms = 86400;
var detik = ms / 1000; //86.4
var menit = detik / 60; //1.4400000000000002
var jam = menit / 60; //0.024000000000000004
var hari = jam / 24; //0.0010000000000000002
Dan menangani presisi float misalnya Number (minutes.toFixed (5)) //1.44
sumber
Di java
Memberikan sesuatu seperti ini:
sumber
Saya tidak bisa mengomentari jawaban pertama atas pertanyaan Anda, tetapi ada kesalahan kecil. Anda harus menggunakan parseInt atau Math.floor untuk mengubah bilangan floating point menjadi integer, i
Secara pribadi, saya menggunakan CoffeeScript dalam proyek saya dan kode saya terlihat seperti itu:
sumber
Ini solusinya. Nanti Anda dapat memisahkan dengan ":" dan mengambil nilai dari array
sumber
Inilah solusi saya menggunakan TimeUnit.
UPDATE: Saya harus menunjukkan bahwa ini ditulis dengan groovy, tetapi Java hampir identik.
sumber
Cara fleksibel untuk melakukannya:
(Tidak dibuat untuk tanggal sekarang tetapi cukup baik untuk jangka waktu tertentu)
NB: Anda juga dapat mengatur timeSteps sebagai parameter jika Anda ingin mengontrol rentang waktu.
cara menggunakan (menyalin tes):
sumber
Saya menyarankan untuk menggunakan http://www.ocpsoft.org/prettytime/ library ..
sangat mudah untuk mendapatkan interval waktu dalam bentuk yang dapat dibaca manusia seperti
PrettyTime p = new PrettyTime(); System.out.println(p.format(new Date()));
itu akan mencetak seperti "momen dari sekarang"
contoh lainnya
PrettyTime p = new PrettyTime()); Date d = new Date(System.currentTimeMillis()); d.setHours(d.getHours() - 1); String ago = p.format(d);
lalu string ago = "1 hour ago"
sumber
Berikut adalah metode yang lebih tepat di JAWA, saya telah menerapkan logika sederhana ini, semoga ini akan membantu Anda:
sumber