我正在处理学校问题,找出算法,找出两个给定日期之间的日期,然后用Java实现。
感兴趣的算法在这里找到: http://www.sunshine2k.de/articles/coding/datediffindays/calcdiffofdatesindates.html (第4点)
这是一种更有效的算法,因为它在实施过程中需要考虑的条件最少。我理解它在这种情况下是如何工作的,但我无法完全围绕在其他地方使用原点/参考点,因为看起来简单的减法可以完成大部分工作。
EG。要找到9和5之间的差异,
我可以9-5
而不是
ref = 1
difference = (9-ref) - (5-ref)
问题:为什么在这种情况下使用此参考/原点?我可以考虑使用此参考/原点解决问题还有哪些其他情况?
答案 0 :(得分:3)
软件工程的第一条规则是“不要重新发明轮子”。
在Java 8及更高版本中获取两个日期之间的日子是微不足道的,不需要编写自己的算法代码:
<?php
$mysql_result = (array) json_decode(file_get_contents('zips'));
if(isset($_GET['ajax'])){
header('content-type: application/json');
$_GET['offset'] = isset($_GET['offset'])?$_GET['offset']:0;
echo json_encode(array_slice($mysql_result,$_GET['offset'],10));
exit;
}
$ar = array_slice($mysql_result,0,10);//or add LIMIT 10 in sql query
?>
<table border="on" width="100%">
<tbody id="songartiststuff">
<?php foreach($ar as $k => $r)://initial render?>
<tr>
<td data-replace="code"><?=$r->code?></td>
<td data-replace="country"><?=$r->country?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<center>
<button data-next="10">Next</button>
<button data-prev="0">Prev</button>
</center>
<script src="jquery.js"></script>
<?php
$mysql_result = (array) json_decode(file_get_contents('zips'));
if(isset($_GET['ajax'])){
header('content-type: application/json');
$_GET['offset'] = isset($_GET['offset'])?$_GET['offset']:0;
echo json_encode(array_slice($mysql_result,$_GET['offset'],10));
exit;
}
$ar = array_slice($mysql_result,0,10);//or add LIMIT 10 in sql query
?>
<table border="on" width="100%">
<tbody id="songartiststuff">
<?php foreach($ar as $k => $r)://initial render?>
<tr>
<td data-replace="code"><?=$r->code?></td>
<td data-replace="country"><?=$r->country?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<center>
<button data-next="10">Next</button>
<button data-prev="0">Prev</button>
</center>
<script src="jquery.js"></script>
<script>
$(()=>{
document.querySelector('[data-next]').addEventListener('click',function(){
move(this.dataset.next);
console.log(this.dataset.next);
this.setAttribute('data-next',parseInt(this.dataset.next) + 10);//add to next
var prv = document.querySelector('[data-prev]');
prv.setAttribute('data-prev',parseInt(prv.dataset.prev) + 10);//add to prev
})
document.querySelector('[data-prev]').addEventListener('click',function(){
move(this.dataset.prev);
console.log(this.dataset.prev);
this.setAttribute('data-prev',parseInt(this.dataset.prev) - 10);// remove form next
var nxt = document.querySelector('[data-next]');
nxt.setAttribute('data-next',parseInt(nxt.dataset.next) - 10);//remove from prev
})
function move(int){
var template = document.querySelector('tbody tr').cloneNode(true);//get a sample from tbody
$.get('table.php?ajax=true&offset='+int).success(function(data){
$(document.querySelector('tbody')).empty();
$.each(data,function(i,v){
let tp = tmp.cloneNode(true);//clone the template
tp.querySelector("[data-replace='code']").innerHTML = v.code;//replace code
tp.querySelector("[data-replace='country']").innerHTML = v.country;//replace country
document.querySelector('tbody').appendChild(tp);//append to tbody
})
});
}
});
</script>
甚至更好
LocalDate d2 = LocalDate.now();
LocalDate d1 = LocalDate.of(1950, Month.JANUARY, 1);
long days = d1.until(d2,ChronoUnit.DAYS);
答案 1 :(得分:0)
要在同一个月的第9天和第5天之间获得差异,您可以减去9-5 (如果在此期间没有日历革命:))。但是对于不同月份和不同年份,您必须考虑当月的不同天数和一年中不同的天数。
考虑这些因素的最简单方法是从某个起源日获得绝对天数 - 所谓的Julian day以我们的时代为起点
答案 2 :(得分:0)
实际上,9-5
使用与0
相同的(9-0) - (5-0)
引用。
与数字不同,0
是参考点,对于日期,参考点并不明显。它应该是公元0年,公元1900年还是其他什么?由于月份,闰年等天数不同,日数不均匀。因此,找到日期与共同日期的“距离”是有用的,例如, 1970-01-01