所以我将代码从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以进行测试。
答案 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