为什么Java和PHP之间的Epoch时间不同?

时间:2016-01-11 16:47:00

标签: java php time locale porting

所以我将代码从PHP移植到Java。部分代码具有时间敏感的散列算法,其中当前的Unix时间戳充当种子。我遇到的问题是我的移植代码给了我不同的语言答案。我怀疑它在实现方面可能略有不同或其他什么。

我想知道这个问题是不是很模糊,例如this。尽管如此,我们将非常感谢任何帮助。

这是我的Java代码。

private static int generateB() {
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", Locale.US);

    Date start;
    Date now;
    try {
        start = sdf.parse("01/01/1970");
        now = new Date();
    } catch (ParseException e) {
        return 402890;
    }
    long diff = now.getTime() - start.getTime();
    long hours = diff / (60 * 60 * 1000) % 24;
    long days = diff / (24 * 60 * 60 * 1000);
    return (int) (hours + days * 24);
}

这是PHP代码:

 /**
 * Generate "b" parameter
 * The number of hours elapsed, since 1st of January 1970
 *
 * @return int
 */
private function generateB()
{
    $start = new \DateTime('1970-01-01');
    $now = new \DateTime('now');
    $diff = $now->diff($start);
    return $diff->h + ($diff->days * 24);
}

然而,他们会返回不同的结果,确切地说是3小时。

在这篇文章发表时。当Java返回403475时,PHP返回403472.另外如果我使用System.currentTimeMillis(),我得到403480.

所以我的问题是为什么会有任何不同?我的意思是减去3可以解决我的问题,但我只是好奇将来参考为什么差异存在。注意:我正在通过PHP Sandbox运行PHP以进行测试。

1 个答案:

答案 0 :(得分:0)

根据你的引言判断

  

在这篇文章发表时。当Java返回403475时,PHP返回403472.另外如果我使用System.currentTimeMillis(),我得到403480。

所有看起来都没问题 - 你的PHP和Java之间有3秒钟,而且还有5秒钟。我想这可能是您切换流程和运行测试所花费的时间?

php > echo date('Y-m-d H:i:s', 403472);
1970-01-05 17:04:32
php > echo date('Y-m-d H:i:s', 403475);
1970-01-05 17:04:35
php > echo date('Y-m-d H:i:s', 403480);
1970-01-05 17:04:40