我正在尝试将毫秒日期转换为years
months
weeks
和days
的数量。
例如:5 months, 2 weeks and 3 days
或1 year and 1 day
。
我不想要:7 days
或4 weeks
>这应该是1 week
和1 month
。
我尝试了几种方法,但它总是变得像7 days and 0 weeks
。
我的代码:
int weeks = (int) Math.abs(timeInMillis / (24 * 60 * 60 * 1000 * 7));
int days = (int) timeInMillis / (24 * 60 * 60 * 1000)+1);
我必须在天数上加1,因为如果我有23小时则应该是1天。
请解释如何正确转换它,我认为有更有效的方法来实现它。
答案 0 :(得分:26)
我总是使用它来从毫秒开始等几年,反之亦然。直到现在我都没有遇到任何问题。希望它有所帮助。
import java.util.Calendar;
Calendar c = Calendar.getInstance();
//Set time in milliseconds
c.setTimeInMillis(milliseconds);
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
int hr = c.get(Calendar.HOUR);
int min = c.get(Calendar.MINUTE);
int sec = c.get(Calendar.SECOND);
答案 1 :(得分:8)
感谢Shobhit Puri我的问题已经解决了。
此代码计算给定时间内的月数,天数等,以毫秒为单位。我用它来计算两个日期之间的差异。
完整解决方案:
long day = (1000 * 60 * 60 * 24); // 24 hours in milliseconds
long time = day * 39; // for example, 39 days
Calendar c = Calendar.getInstance();
c.setTimeInMillis(time);
int mYear = c.get(Calendar.YEAR)-1970;
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH)-1;
int mWeek = (c.get(Calendar.DAY_OF_MONTH)-1)/7; // ** if you use this, change the mDay to (c.get(Calendar.DAY_OF_MONTH)-1)%7
再次感谢你!
答案 2 :(得分:3)
来源:Convert time interval given in seconds into more human readable form
function secondsToString(seconds)
{
var numyears = Math.floor(seconds / 31536000);
var numdays = Math.floor((seconds % 31536000) / 86400);
var numhours = Math.floor(((seconds % 31536000) % 86400) / 3600);
var numminutes = Math.floor((((seconds % 31536000) % 86400) % 3600) / 60);
var numseconds = (((seconds % 31536000) % 86400) % 3600) % 60;
return numyears + " years " + numdays + " days " + numhours + " hours " + numminutes + " minutes " + numseconds + " seconds";
}