【问题标题】:Difference between two dates and percentage of current time java两个日期之间的差异和当前时间的百分比java
【发布时间】:2013-03-30 15:19:59
【问题描述】:

我正在尝试使用线程创建计时机制,但在获取两个日期之间的时间差以及使用该差来获取当前剩余时间百分比时遇到了问题。这是我试图原型化的概念:

这是我的实现:

long startMilisecs = System.currentTimeMillis();
long currentMilisecs;
long endDateMilisecs = getEndDate().getTime();
int diffMillisecs = ((int)(endDateMilisecs - startMilisecs) / 1000) / 60;
int currPerc; 
while (startMilisecs <= endDateMilisecs) 
{
    currentMilisecs = (int) System.currentTimeMillis();
    currPerc = ((int)currentMilisecs * 100) / diffMillisecs;
    System.out.println(" Current Percentage: " + currPerc);
}

这段代码的问题是百分比不是从 0 开始,而是从 20% 到 40%。

你能告诉我这有什么问题吗?对于这个问题,我被限制为只使用线程。

【问题讨论】:

  • 百分比不是从 0 开始是什么意思
  • startMilisecs = System.currentTimeMillis() 应该是 Date1

标签: java date variable-assignment


【解决方案1】:

检查如下:

 public static int getPercentageLeft(Date start, Date end) {
        long now = System.currentTimeMillis();
        long s = start.getTime();
        long e = end.getTime();
        if (s >= e || now >= e) {
            return 0;
        }
        if (now <= s) {
            return 100;
        }
        return (int) ((e - now) * 100 / (e - s));
    }

【讨论】:

    【解决方案2】:

    你需要像这样减去开始时间

    currPerc = ((currentMilisecs - startMilisecs) * 100) / diffMillisecs;
    

    得到正确的百分比。

    【讨论】:

      【解决方案3】:

      问题在于 System.currentTimeMillis();。取自 javadoc:

      public static long currentTimeMillis()

      以毫秒为单位返回当前时间。请注意,虽然单位 返回值的时间为毫秒,粒度为 value 取决于底层操作系统,可能更大。 例如,许多操作系统以几十为单位测量时间 毫秒。

      查看类 Date 的描述来讨论轻微的 “计算机时间”和协调之间可能出现的差异 世界标准时间 (UTC)。

      返回: 当前时间与 UTC 时间 1970 年 1 月 1 日午夜之间的差异,以毫秒为单位。

      因此,您当前的时间(以毫秒为单位)基于 1970 年 1 月 1 日 UTC,而不是您的开始日期。

      您需要通过从System.currentTimeMillis(); 给出的值中减去开始时间来计算当前时间。

      我基本上是在这里制定您的链接图像。也可以进行其他替代计算。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多