以纪元毫秒为单位从当前日期减去两天 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 年以来的当前时间戳(以毫秒为单位)

在 T-SQL 中将以毫秒为单位的 Epoch 转换为日期

获取Java中的当前时间(以毫秒为单位)(只是时间,而不是日期)

以毫秒为单位获取以毫秒为单位的午夜纪元时间

如何创建从纪元时间到 matplotlib 可以使用的可绘制日期

如何从 postgres 获取时间戳作为 Unix 纪元?