以纪元毫秒为单位从当前日期减去两天 java [重复]
Posted
技术标签:
【中文标题】以纪元毫秒为单位从当前日期减去两天 java [重复]【英文标题】:subtracting two days from current date in epoch milliseconds java [duplicate] 【发布时间】:2013-03-14 12:04:18 【问题描述】:我正在尝试做一些非常简单的事情。我试图从当天减去 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);
似乎没有任何效果。我在这里做错了什么?
【问题讨论】:
“我认为这样做的结果是它只减去了几分钟的时间。”你为什么这么认为? 【参考方案1】:试试
long millis = System.currentTimeMillis() - 2 * 24 * 60 * 60 * 1000;
Date date = new Date(millis);
确实有效
【讨论】:
根据JavaDocs的System.currentTimeMillis()方法:“以毫秒为单位返回当前时间。注意虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大。例如,许多操作系统以几十毫秒为单位测量时间。有关“计算机时间”和协调世界时 (UTC) 之间可能出现的细微差异的讨论,请参见 Date 类的描述)。”这必须特定于操作系统。理论上,这并不总是准确的 2 * 24 * 60 * 60 * 1000 有趣的答案。所以不正确:-) 尝试用它来减去一年或者说 360 天。你会明白为什么。一个字母可以改变多少结果:-)【参考方案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();
【讨论】:
@0tta:这个答案对你有用吗?【参考方案3】:您的代码没问题,您的变量 d 应该与服务器上的当前时间相差 48 小时。
确保服务器和您的客户端同时运行,否则请您的服务器管理员修复部署计算机上的时间。
如果您的客户端正在打开浏览器,例如,您也会注意到这种差异。由于标准时差,日本和您的服务器在美国运行。
【讨论】:
【参考方案4】:试试这个
long diff = Math.abs(d1.getTime() - d2.getTime());
long diffDays = diff / (2*24 * 60 * 60 * 1000);
【讨论】:
【参考方案5】:避免使用旧的 java.util.Date 和 .Calendar 类,因为它们非常麻烦。
使用 Joda-Time 或 Java 8 中内置的新 Java.time 包。在 *** 上搜索数百个问题和答案。
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 );
【讨论】:
以上是关于以纪元毫秒为单位从当前日期减去两天 java [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何像 Java 一样获取自 1970 年以来的当前时间戳(以毫秒为单位)
获取Java中的当前时间(以毫秒为单位)(只是时间,而不是日期)