Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期数学后显示错误的时间_Java_Date - Fatal编程技术网

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

Java 日期数学后显示错误的时间,java,date,Java,Date,我有一个应用程序可以跟踪顾客在餐馆的等待时间。它只是从当前时间减去客户开始等待的时间,然后使用StandardDateFormat将其格式化为hh:mm,并将其显示为字符串 问题是计时器总是以6小时开始,例如06:01 ActionListener actListner = new ActionListener() { public void actionPerformed(ActionEvent event) { aT

我有一个应用程序可以跟踪顾客在餐馆的等待时间。它只是从当前时间减去客户开始等待的时间,然后使用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());
}
public void updateTime()
{
Date newTime=新日期();
对于(int i=0;i
这是在数据模型中


每次添加新行时,它都会将添加行的时间放在一列中,然后在另一列中显示该人员一直在等待的时间,但等待列提前了6个小时。这听起来像是时区问题。也许您应该将日期格式的时区设置为UTC。

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

我建议你使用像这样的图书馆。它为间隔和持续时间等概念提供了特殊的类


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

即使我将时区设置为CST的本地时间,它仍然会显示6:00不。。。它可能会自动设置为CST(UTC-6:00)。您需要将其设置为UTC(GMT)