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;
	}
}