从epoch毫秒java中减去当前日期的两天

时间:2013-03-25 04:12:36

标签: java date epoch milliseconds subtraction

我正在尝试做一些非常简单的事情。我想从当天减去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);

似乎没什么用。我在这里做错了什么?

5 个答案:

答案 0 :(得分:11)

尝试

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

它肯定有效

答案 1 :(得分:2)

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

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

long millisec = d.getTime();

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

试试这个

   long diff = Math.abs(d1.getTime() - d2.getTime());
   long diffDays = diff / (2*24 * 60 * 60 * 1000);

答案 4 :(得分:0)

避免使用旧的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 );