我有一个长变量,表示延迟量,以毫秒为单位。我想把这个很长一段时间转换成某种日期,它表示已经过了多少小时,分钟,秒,日,月,年。
当使用Java中的Date toString()时,如新的Date(5).toString,它表示从1970年开始已经过了5毫秒。我需要它说5毫秒已经过去,0分钟,小时,... ,岁月。
答案 0 :(得分:0)
您无法获得直接值,如果没有任何参考日期,您需要定义第一个参考值,如下所示:
String dateStart = "01/14/2012 09:29:58";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss")
Date d1 = format.parse(dateStart);
以上是您的参考日期,现在您需要使用以下内容查找当前日期和时间。
long currentDateTime = System.currentTimeMillis();
Date currentDate = new Date(currentDateTime);
Date d2.format(currentDate)
这些值(例如long diff=d2-d1
)的差异将以毫秒为单位给出值。
那么
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
,同样适用于months and years.
您还可以参考此链接上提供的示例以获取更多信息http://javarevisited.blogspot.in/2012/12/how-to-convert-millisecond-to-date-in-java-example.html
答案 1 :(得分:0)
根据我从您的问题中理解,您可以通过编写适合您需求的方法来实现您的目标,即:
static public String dateFromMili (long miliseconds) {
// constants that will hold the number of miliseconds
// in a given time unit (year, month etc.)
final int YEAR_IN_MILISECONDS = 12*30*24*60*60*1000;
final int MONTH_IN_MILISECONDS = 30*24*60*60*1000;
final int DAY_IN_MILISECONDS = 24*60*60*1000;
final int HOUR_IN_MILISECONDS = 60*60*1000;
final int MINUTE_IN_MILISECONDS = 60*1000;
final int SECONDS_IN_MILISECONDS = 1000;
// now use those constants to return an appropriate string.
return miliseconds +" miliseconds, "
+miliseconds/SECONDS_IN_MILISECONDS+" seconds, "
+miliseconds/MINUTE_IN_MILISECONDS+" minutes, "
+miliseconds/HOUR_IN_MILISECONDS+" hours, "
+miliseconds/DAY_IN_MILISECONDS+" days, "
+miliseconds/MONTH_IN_MILISECONDS+" months, "
+miliseconds/YEAR_IN_MILISECONDS+" years have passed";
}
您将不得不将毫秒数作为参数传递给新函数,该函数将返回所需的字符串(即两秒钟):
dateFromMili (2000);
你也可以打印你的答案:
System.out.println(dateFromMili(2000));
结果如下:
2000毫秒,2秒,0分钟,0小时,0天,0个月,0年过去了
请注意,此方法将返回带有整数值的字符串(例如,#34; 2.222333年"但是" 2年")。此外,当上下文适当时("月"到"月"),可以通过将名词从复数更改为单数来完善它。
我希望我的回答有所帮助。
答案 2 :(得分:0)
这就是我解决问题的方法:
我使用了一个名为Joda-Time(http://www.joda.org/joda-time/)的图书馆(Keppil的学分!)
Joda-Time拥有各种日期和时间数据结构。您可以通过DateTime对象表示日期和时间。 为了表示我正在寻找的延迟,我有两个选择:Period数据结构或Duration数据结构。可以在此处找到对这两者之间差异的一个很好的解释:Joda-Time: what's the difference between Period, Interval and Duration?。
因此,我根据DateTime对象的当前日期使用了Duration对象。它具有将毫秒数转换为年,月,周,日,小时,分钟和秒的所有方法。