两个日历时间之间的差异。结果还有一个小时

问题描述 投票:1回答:3

我有两次日历。

    Calendar orarioP1 = new GregorianCalendar(2014, 3, 28, 8, 30, 00);
    Calendar orarioA1 = new GregorianCalendar(2014, 3, 28, 12, 35, 06);  

我实现了这个功能以获得时差,但它返回我+ 1小时的差异。 我需要返回正确的差异4:05:06但现在它返回我5:05:06。谁能帮我?

public String getTimeDiff() {

    SimpleDateFormat sdf = new SimpleDateFormat("h:mm:ss");
    long milliSec1 = orarioP1.getTimeInMillis();
    long milliSec2 = orarioA1.getTimeInMillis();

    long timeDifInMilliSec;
    if(milliSec1 >= milliSec2) {
        timeDifInMilliSec = milliSec1 - milliSec2;
    } else {
        timeDifInMilliSec = milliSec2 - milliSec1;
    }

    long timeDifSeconds = timeDifInMilliSec / 1000;
    long timeDifMinutes = timeDifInMilliSec / (60 * 1000);
    long timeDifHours = timeDifInMilliSec / (60 * 60 * 1000);
    long timeDifDays = timeDifInMilliSec / (24 * 60 * 60 * 1000);

    Date date = new Date(timeDifSeconds);
    String difference = sdf.format(date);

    return difference;
}
java date time difference milliseconds
3个回答
0
投票

尝试这样的事情

    Calendar orarioP1 = new GregorianCalendar(2014, 3, 28, 8, 30, 00);
    orarioP1.setTimeZone(TimeZone.getTimeZone("GMT"));
    Calendar orarioA1 = new GregorianCalendar(2014, 3, 28, 12, 35, 06);
    orarioA1.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println("Difference In Hours : "
       +(orarioA1.get(Calendar.HOUR_OF_DAY)-orarioP1.get(Calendar.HOUR_OF_DAY)));
    System.out.println("Difference In Minutes : "
        +(orarioA1.get(Calendar.MINUTE)-orarioP1.get(Calendar.MINUTE)));
    System.out.println("Difference In Seconds : "
        +(orarioA1.get(Calendar.SECOND)-orarioP1.get(Calendar.SECOND)));
    System.out.println("Difference In MiliSeconds : "
       +(orarioA1.get(Calendar.MILLISECOND)-orarioP1.get(Calendar.MILLISECOND)));

0
投票

你误会了。 new Date(long timemillisec)将返回since January 1, 1970, 00:00:00 GMT + your timemillisec的Date实例。 这是你的时区,使January 1, 1970, 00:00:00有点接近January 1, 1970, 05:~:~

只需使用:

String difference = sdf.format(new Date(0));

您将得到相同的结果,即您的情况下1小时的差异,这是由于与GMT的时差。 看看你的代码,你将毫秒转换为秒,你不需要它。 只需使用millisecs:Date date = new Date(timeDifInMilliSec);

看看这个:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MMM/dd h:mm:ss");
 System.out.println(sdf.format(new Date(0)));
 System.out.println(sdf.format(new Date(1000)));

产量

1970/Jan/01 5:30:00
1970/Jan/01 5:30:01

这是我的位置。


0
投票

你创建了一个日期1970-01-01 04:05:06 GMT,它会转移到你当前的时区。在您自己的矿石上格式化时间差可以更好地使用Joda Time库。

使用Joda Time的Period课程。 Docs here

你的代码:

   public String getTimeDiff() {
      DateTime start = new DateTime(2014, 3, 28, 8, 30, 00);
      DateTime end = new DateTime(2014, 3, 28, 12, 35, 06);
      Period period = new Period(start, end);
      return PeriodFormat.getDefault().print(period);
  }

返回:4 hours, 5 minutes and 6 seconds

© www.soinside.com 2019 - 2024. All rights reserved.