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; } }
时间: 2024-10-23 20:40:25