代表从长0开始,而不是1970年的日期

时间:2014-04-13 14:53:58

标签: java date time

我有一个长变量,表示延迟量,以毫秒为单位。我想把这个很长一段时间转换成某种日期,它表示已经过了多少小时,分钟,秒,日,月,年。

当使用Java中的Date toString()时,如新的Date(5).toString,它表示从1970年开始已经过了5毫秒。我需要它说5毫秒已经过去,0分钟,小时,... ,岁月。

3 个答案:

答案 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对象。它具有将毫秒数转换为年,月,周,日,小时,分钟和秒的所有方法。