import java.util.Date;
public class HotArticleRank {
/************
* 输入发贴时间,返回发贴时间距离1970.1.1的秒数
* @param Date dateTimes
* @return
*/
private static long epoch_seconds(Date pubtimes) {
return pubtimes.getTime() / 1000 - 1134028003;
}
/******
* 输入顶,踩,返回差值
* @param ups
* @param downs
* @return
*/
private static long score(long ups, long downs) {
return ups - downs;
}
/******
* 计算热度值,输入顶,踩和发贴时间,返回热度值
* @param ups 文章顶的数量
* @param downs 文章踩的数量
* @param pubtimes 文章发布时间
* @return
*/
public static double getHotVal(long ups, long downs, Date pubtimes) {
double hotrank = 0;
long seconds = 0;
long scorecount = 0;
double order = 0;
long signcount = 0;
scorecount = score(ups, downs);
seconds = epoch_seconds(pubtimes);
//计算贴子的受肯定(否定)的程度,如果对某个贴子的评价,越是一边倒,
//order就越大,但会趋于平缓。如果顶等于踩,则为0
order = Math.log10(Math.max(Math.abs(scorecount), 1));
signcount = (long) Math.signum(scorecount);
//seconds越大,得分越高,即新帖子的得分会高于老帖子。
//它起到自动将老帖子的排名往下拉的作用。
hotrank = order + (signcount * seconds) / 45000;
return hotrank;
}
}