11

我正在尝试做一些非常简单的事情。我试图从当天减去 2 天。我从 UI 获得小时数。所以在这个例子中,我从 UI 得到了 48 小时。我正在做以下事情,我不知道我在这里做错了什么。我认为这样做的结果是它只减少了几分钟的时间。

long timeInEpoch = (currentMillis()/1000 - (48 * 60 * 60)); //48 comes from UI

public long currentMillis(){
    return new Date().getTime();
}

d = new Date(timeInEpoch * 1000);

我也试过

d1 = new Date(timeInEpoch);

似乎没有任何效果。我在这里做错了什么?

4

5 回答 5

19

尝试

    long millis = System.currentTimeMillis() - 2 * 24 * 60 * 60 * 1000; 
    Date date = new Date(millis);

它绝对有效

于 2013-03-25T04:41:42.883 回答
3

使用这样的日历API 从Date对象中减去 2 天:

Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, -2);
d.setTime( c.getTime().getTime() );

long millisec = d.getTime();
于 2013-03-25T04:29:05.967 回答
2

您的代码没问题,您的变量 d 应该与服务器上的当前时间相差 48 小时。

确保服务器和您的客户端同时运行,否则请您的服务器管理员修复部署机器上的时间。

如果您的客户端在日本打开浏览器并且您的服务器由于标准时差而在美国运行,您也会注意到这种差异。

于 2013-03-25T04:41:40.687 回答
1

避免使用旧的 java.util.Date 和 .Calendar 类,因为它们非常麻烦。

使用 Joda-Time 或 Java 8 中内置的新 Java.time 包。在 StackOverflow 上搜索数百个问题和答案。

Joda-Time 提供了增加和减少小时、天等的方法。数学以一种聪明的方式完成,处理夏令时废话和其他问题。

Joda-Time 2.7 中的快速示例(因为这确实是一个重复的问题,请参阅其他人了解更多信息)。

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );
DateTime fortyEightHoursAgo = now.minusHours( 48 );
DateTime twoDaysAgo = now.minusDays( 2 );
于 2015-01-29T18:22:32.693 回答
1

尝试这个

   long diff = Math.abs(d1.getTime() - d2.getTime());
   long diffDays = diff / (2*24 * 60 * 60 * 1000);
于 2013-03-25T04:24:57.390 回答