我正在尝试做一些非常简单的事情。我想从当天减去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);
似乎没什么用。我在这里做错了什么?
答案 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 );