Tôi cần chuyển đổi một lượng mili giây tùy ý thành Ngày, Giờ, Phút Giây.
Ví dụ: 10 Ngày, 5 giờ, 13 phút, 1 giây.
Tôi cần chuyển đổi một lượng mili giây tùy ý thành Ngày, Giờ, Phút Giây.
Ví dụ: 10 Ngày, 5 giờ, 13 phút, 1 giây.
Câu trả lời:
Chà, vì chưa có ai khác bước lên, tôi sẽ viết đoạn mã đơn giản để làm điều này:
x = ms / 1000
seconds = x % 60
x /= 60
minutes = x % 60
x /= 60
hours = x % 24
x /= 24
days = x
Tôi chỉ mừng vì bạn đã dừng lại vài ngày và không hỏi trong nhiều tháng. :)
Lưu ý rằng trong phần trên, nó được giả định là /
đại diện cho phép chia số nguyên cắt ngắn. Nếu bạn sử dụng mã này bằng một ngôn ngữ /
biểu thị phép chia dấu phẩy động, bạn sẽ cần phải cắt bớt các kết quả của phép chia theo cách thủ công nếu cần.
Gọi A là số phần nghìn giây. Sau đó bạn có:
seconds=(A/1000)%60
minutes=(A/(1000*60))%60
hours=(A/(1000*60*60))%24
và như vậy ( %
là toán tử mô đun).
Hi vọng điêu nay co ich.
/
thực hiện phép chia dấu phẩy động, bạn cần phải cắt bớt giá trị. Nó được giả định trong các câu trả lời khác /
đang thực hiện phép chia số nguyên.
Cả hai giải pháp bên dưới đều sử dụng javascript (Tôi không biết giải pháp là ngôn ngữ bất khả tri!). Cả hai giải pháp sẽ cần được mở rộng nếu ghi lại thời lượng > 1 month
.
var date = new Date(536643021);
var str = '';
str += date.getUTCDate()-1 + " days, ";
str += date.getUTCHours() + " hours, ";
str += date.getUTCMinutes() + " minutes, ";
str += date.getUTCSeconds() + " seconds, ";
str += date.getUTCMilliseconds() + " millis";
console.log(str);
Cung cấp:
"6 days, 5 hours, 4 minutes, 3 seconds, 21 millis"
Thư viện rất hữu ích, nhưng tại sao lại sử dụng thư viện khi bạn có thể phát minh lại bánh xe! :)
var getDuration = function(millis){
var dur = {};
var units = [
{label:"millis", mod:1000},
{label:"seconds", mod:60},
{label:"minutes", mod:60},
{label:"hours", mod:24},
{label:"days", mod:31}
];
// calculate the individual unit values...
units.forEach(function(u){
millis = (millis - (dur[u.label] = (millis % u.mod))) / u.mod;
});
// convert object to a string representation...
var nonZero = function(u){ return dur[u.label]; };
dur.toString = function(){
return units
.reverse()
.filter(nonZero)
.map(function(u){
return dur[u.label] + " " + (dur[u.label]==1?u.label.slice(0,-1):u.label);
})
.join(', ');
};
return dur;
};
Tạo đối tượng "thời lượng", với bất kỳ trường nào bạn yêu cầu. Định dạng dấu thời gian sau đó trở nên đơn giản ...
console.log(getDuration(536643021).toString());
Cung cấp:
"6 days, 5 hours, 4 minutes, 3 seconds, 21 millis"
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 có DurationFormatUtils có các phương thức rất hữu ích như formatDurationWords .
Bạn nên sử dụng các hàm datetime của bất kỳ ngôn ngữ nào bạn đang sử dụng, nhưng, đây là đoạn mã:
int milliseconds = someNumber;
int seconds = milliseconds / 1000;
int minutes = seconds / 60;
seconds %= 60;
int hours = minutes / 60;
minutes %= 60;
int days = hours / 24;
hours %= 24;
Đây là một phương pháp tôi đã viết. Nó nhận một integer milliseconds value
và trả về một human-readable String
:
public String convertMS(int ms) {
int seconds = (int) ((ms / 1000) % 60);
int minutes = (int) (((ms / 1000) / 60) % 60);
int hours = (int) ((((ms / 1000) / 60) / 60) % 24);
String sec, min, hrs;
if(seconds<10) sec="0"+seconds;
else sec= ""+seconds;
if(minutes<10) min="0"+minutes;
else min= ""+minutes;
if(hours<10) hrs="0"+hours;
else hrs= ""+hours;
if(hours == 0) return min+":"+sec;
else return hrs+":"+min+":"+sec;
}
function convertTime(time) {
var millis= time % 1000;
time = parseInt(time/1000);
var seconds = time % 60;
time = parseInt(time/60);
var minutes = time % 60;
time = parseInt(time/60);
var hours = time % 24;
var out = "";
if(hours && hours > 0) out += hours + " " + ((hours == 1)?"hr":"hrs") + " ";
if(minutes && minutes > 0) out += minutes + " " + ((minutes == 1)?"min":"mins") + " ";
if(seconds && seconds > 0) out += seconds + " " + ((seconds == 1)?"sec":"secs") + " ";
if(millis&& millis> 0) out += millis+ " " + ((millis== 1)?"msec":"msecs") + " ";
return out.trim();
}
Tôi khuyên bạn nên sử dụng bất kỳ chức năng / thư viện ngày / giờ nào mà ngôn ngữ / khuôn khổ lựa chọn của bạn cung cấp. Ngoài ra, hãy kiểm tra các hàm định dạng chuỗi vì chúng thường cung cấp các cách dễ dàng để chuyển ngày / dấu thời gian và xuất ra định dạng chuỗi có thể đọc được của con người.
Lựa chọn của bạn rất đơn giản:
Long serverUptimeSeconds =
(System.currentTimeMillis() - SINCE_TIME_IN_MILLISECONDS) / 1000;
String serverUptimeText =
String.format("%d days %d hours %d minutes %d seconds",
serverUptimeSeconds / 86400,
( serverUptimeSeconds % 86400) / 3600 ,
((serverUptimeSeconds % 86400) % 3600 ) / 60,
((serverUptimeSeconds % 86400) % 3600 ) % 60
);
Long expireTime = 69l;
Long tempParam = 0l;
Long seconds = math.mod(expireTime, 60);
tempParam = expireTime - seconds;
expireTime = tempParam/60;
Long minutes = math.mod(expireTime, 60);
tempParam = expireTime - minutes;
expireTime = expireTime/60;
Long hours = math.mod(expireTime, 24);
tempParam = expireTime - hours;
expireTime = expireTime/24;
Long days = math.mod(expireTime, 30);
system.debug(days + '.' + hours + ':' + minutes + ':' + seconds);
Điều này sẽ in: 0,0: 1: 9
Tại sao không làm điều gì đó như thế này:
var ms = 86400;
var giây = ms / 1000; //86,4
var phút = giây / 60; //1.4400000000000002
var giờ = phút / 60; //0.024000000000000004
var ngày = giờ / 24; //0.0010000000000000002
Và đối phó với độ chính xác float, ví dụ: Number (minutes.toFixed (5)) //1.44
Trong java
public static String formatMs(long millis) {
long hours = TimeUnit.MILLISECONDS.toHours(millis);
long mins = TimeUnit.MILLISECONDS.toMinutes(millis);
long secs = TimeUnit.MILLISECONDS.toSeconds(millis);
return String.format("%dh %d min, %d sec",
hours,
mins - TimeUnit.HOURS.toMinutes(hours),
secs - TimeUnit.MINUTES.toSeconds(mins)
);
}
Cung cấp một cái gì đó như thế này:
12h 1 min, 34 sec
Tôi không thể bình luận câu trả lời đầu tiên cho câu hỏi của bạn, nhưng có một sai sót nhỏ. Bạn nên sử dụng parseInt hoặc Math.floor để chuyển đổi số dấu phẩy động thành số nguyên, i
var days, hours, minutes, seconds, x;
x = ms / 1000;
seconds = Math.floor(x % 60);
x /= 60;
minutes = Math.floor(x % 60);
x /= 60;
hours = Math.floor(x % 24);
x /= 24;
days = Math.floor(x);
Cá nhân tôi sử dụng CoffeeScript trong các dự án của mình và mã của tôi trông như thế:
getFormattedTime : (ms)->
x = ms / 1000
seconds = Math.floor x % 60
x /= 60
minutes = Math.floor x % 60
x /= 60
hours = Math.floor x % 24
x /= 24
days = Math.floor x
formattedTime = "#{seconds}s"
if minutes then formattedTime = "#{minutes}m " + formattedTime
if hours then formattedTime = "#{hours}h " + formattedTime
formattedTime
Đây là một giải pháp. Sau đó, bạn có thể chia theo ":" và lấy các giá trị của mảng
/**
* Converts milliseconds to human readeable language separated by ":"
* Example: 190980000 --> 2:05:3 --> 2days 5hours 3min
*/
function dhm(t){
var cd = 24 * 60 * 60 * 1000,
ch = 60 * 60 * 1000,
d = Math.floor(t / cd),
h = '0' + Math.floor( (t - d * cd) / ch),
m = '0' + Math.round( (t - d * cd - h * ch) / 60000);
return [d, h.substr(-2), m.substr(-2)].join(':');
}
var delay = 190980000;
var fullTime = dhm(delay);
console.log(fullTime);
Đây là giải pháp của tôi bằng cách sử dụng TimeUnit.
CẬP NHẬT: Tôi nên chỉ ra rằng điều này được viết bằng Groovy, nhưng Java gần như giống hệt nhau.
def remainingStr = ""
/* Days */
int days = MILLISECONDS.toDays(remainingTime) as int
remainingStr += (days == 1) ? '1 Day : ' : "${days} Days : "
remainingTime -= DAYS.toMillis(days)
/* Hours */
int hours = MILLISECONDS.toHours(remainingTime) as int
remainingStr += (hours == 1) ? '1 Hour : ' : "${hours} Hours : "
remainingTime -= HOURS.toMillis(hours)
/* Minutes */
int minutes = MILLISECONDS.toMinutes(remainingTime) as int
remainingStr += (minutes == 1) ? '1 Minute : ' : "${minutes} Minutes : "
remainingTime -= MINUTES.toMillis(minutes)
/* Seconds */
int seconds = MILLISECONDS.toSeconds(remainingTime) as int
remainingStr += (seconds == 1) ? '1 Second' : "${seconds} Seconds"
Một cách linh hoạt để làm điều đó:
(Không được thực hiện cho ngày hiện tại nhưng đủ tốt cho thời lượng)
/**
convert duration to a ms/sec/min/hour/day/week array
@param {int} msTime : time in milliseconds
@param {bool} fillEmpty(optional) : fill array values even when they are 0.
@param {string[]} suffixes(optional) : add suffixes to returned values.
values are filled with missings '0'
@return {int[]/string[]} : time values from higher to lower(ms) range.
*/
var msToTimeList=function(msTime,fillEmpty,suffixes){
suffixes=(suffixes instanceof Array)?suffixes:[]; //suffixes is optional
var timeSteps=[1000,60,60,24,7]; // time ranges : ms/sec/min/hour/day/week
timeSteps.push(1000000); //add very big time at the end to stop cutting
var result=[];
for(var i=0;(msTime>0||i<1||fillEmpty)&&i<timeSteps.length;i++){
var timerange = msTime%timeSteps[i];
if(typeof(suffixes[i])=="string"){
timerange+=suffixes[i]; // add suffix (converting )
// and fill zeros :
while( i<timeSteps.length-1 &&
timerange.length<((timeSteps[i]-1)+suffixes[i]).length )
timerange="0"+timerange;
}
result.unshift(timerange); // stack time range from higher to lower
msTime = Math.floor(msTime/timeSteps[i]);
}
return result;
};
NB: bạn cũng có thể đặt timeSteps làm tham số nếu bạn muốn kiểm soát phạm vi thời gian.
cách sử dụng (sao chép một bài kiểm tra):
var elsapsed = Math.floor(Math.random()*3000000000);
console.log( "elsapsed (labels) = "+
msToTimeList(elsapsed,false,["ms","sec","min","h","days","weeks"]).join("/") );
console.log( "half hour : "+msToTimeList(elsapsed,true)[3]<30?"first":"second" );
console.log( "elsapsed (classic) = "+
msToTimeList(elsapsed,false,["","","","","",""]).join(" : ") );
Tôi khuyên bạn nên sử dụng thư viện http://www.ocpsoft.org/prettytime/ ..
rất đơn giản để có được khoảng thời gian ở dạng con người có thể đọc được như
PrettyTime p = new PrettyTime();
System.out.println(p.format(new Date()));
nó sẽ in như "khoảnh khắc từ bây giờ"
ví dụ khác
PrettyTime p = new PrettyTime());
Date d = new Date(System.currentTimeMillis());
d.setHours(d.getHours() - 1);
String ago = p.format(d);
then string ago = "1 giờ trước"
Đây là phương pháp chính xác hơn trong JAVA, tôi đã thực hiện logic đơn giản này, hy vọng điều này sẽ giúp bạn:
public String getDuration(String _currentTimemilliSecond)
{
long _currentTimeMiles = 1;
int x = 0;
int seconds = 0;
int minutes = 0;
int hours = 0;
int days = 0;
int month = 0;
int year = 0;
try
{
_currentTimeMiles = Long.parseLong(_currentTimemilliSecond);
/** x in seconds **/
x = (int) (_currentTimeMiles / 1000) ;
seconds = x ;
if(seconds >59)
{
minutes = seconds/60 ;
if(minutes > 59)
{
hours = minutes/60;
if(hours > 23)
{
days = hours/24 ;
if(days > 30)
{
month = days/30;
if(month > 11)
{
year = month/12;
Log.d("Year", year);
Log.d("Month", month%12);
Log.d("Days", days % 30);
Log.d("hours ", hours % 24);
Log.d("Minutes ", minutes % 60);
Log.d("Seconds ", seconds % 60);
return "Year "+year + " Month "+month%12 +" Days " +days%30 +" hours "+hours%24 +" Minutes "+minutes %60+" Seconds "+seconds%60;
}
else
{
Log.d("Month", month);
Log.d("Days", days % 30);
Log.d("hours ", hours % 24);
Log.d("Minutes ", minutes % 60);
Log.d("Seconds ", seconds % 60);
return "Month "+month +" Days " +days%30 +" hours "+hours%24 +" Minutes "+minutes %60+" Seconds "+seconds%60;
}
}
else
{
Log.d("Days", days );
Log.d("hours ", hours % 24);
Log.d("Minutes ", minutes % 60);
Log.d("Seconds ", seconds % 60);
return "Days " +days +" hours "+hours%24 +" Minutes "+minutes %60+" Seconds "+seconds%60;
}
}
else
{
Log.d("hours ", hours);
Log.d("Minutes ", minutes % 60);
Log.d("Seconds ", seconds % 60);
return "hours "+hours+" Minutes "+minutes %60+" Seconds "+seconds%60;
}
}
else
{
Log.d("Minutes ", minutes);
Log.d("Seconds ", seconds % 60);
return "Minutes "+minutes +" Seconds "+seconds%60;
}
}
else
{
Log.d("Seconds ", x);
return " Seconds "+seconds;
}
}
catch (Exception e)
{
Log.e(getClass().getName().toString(), e.toString());
}
return "";
}
private Class Log
{
public static void d(String tag , int value)
{
System.out.println("##### [ Debug ] ## "+tag +" :: "+value);
}
}