日期数学后显示错误的时间

时间:2014-03-29 03:20:25

标签: java date

我有一个应用程序可以跟踪客户在餐厅的等待时间。它只是减去客户从当前时间开始等待的时间,然后使用StandardDateFormat将其格式化为hh:mm并将其显示为字符串。

问题是计时器始终以6小时开始,例如06:01。

    ActionListener actListner = new ActionListener() 
    {
        public void actionPerformed(ActionEvent event) 
        {
            aTable.updateTime();
        }
    };

    Timer timer = new Timer(1000, actListner);
    timer.start();
}

这是主程序

public void updateTime()
{
    data.updateTime();
    fireTableDataChanged();
    fireTableRowsInserted(data.name.size() - 1, data.name.size() - 1);
}

这是表格模型

public void updateTime()
{
    Date newTime = new Date();

    for (int i = 0; i < startTime.size(); i++)
    {                  
        this.setTimeWaiting(i, hoursMin.format(new Date(newTime.getTime() - startTime.get(i).getTime())));  
    }
}

public void setTimeWaiting(int index, Object newVar)
{
    timeWaiting.remove(index);
    timeWaiting.add(index, newVar.toString());
}

这是在数据模型中。

每次添加新行时,它会将行添加到一列中的时间,然后是该人在另一列中等待的时间,但等待列提前6小时。否则它可以正常工作。

2 个答案:

答案 0 :(得分:1)

这听起来像是时区问题。也许您应该将日期格式的时区设置为UTC。

答案 1 :(得分:1)

正如k_g所说,这几乎肯定是一个时区问题。你得到了有趣的结果,因为Date类用于绝对时间,而不是间隔。

我建议您使用像Joda Time这样的库。它有特殊的类,用于间隔和持续时间等概念。

或者,如果您使用的是JDK 8,则可以使用刚刚引入的新日期/时间类。