Java每日登陆 和 月卡功能

//每日登陆

<1>

// 每日登陆---------------
// 初始化今昨两天日期数
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());// 今天的日期数
Data.today = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH) - 1);// 昨天的日期数
Data.yesterday = calendar.get(Calendar.DAY_OF_MONTH);
// 初始化量准备弹出每日登陆窗
Data.lastLoginDate = SPUtil.getDataFormSp(main.getSp(),
"lastLoginDate", Data.yesterday);// 如果不存在最后登录日期,将昨天的日期作为最后登录日期
Data.dayNumSum = SPUtil.getDataFormSp(main.getSp(), "dayNumSum", 0);
// 如果上次登录是昨天,连续登录天数增加
if (Data.yesterday == Data.lastLoginDate) {
	Data.dayNumSum += 1;
	SPUtil.commit(main.getSp(), "dayNumSum", Data.dayNumSum);
}

<2>

import java.util.Calendar;


//测试函数
public class Main {

	public static void main(String[] args) {
		
		Calendar calender = Calendar.getInstance();
		//
		int today = calender.get(Calendar.DAY_OF_MONTH);
		System.out.println("1:" + today);
		
		
		//
		calender.set(Calendar.DAY_OF_MONTH, calender.get(Calendar.DAY_OF_MONTH) + 18);
		int yesterday = calender.get(Calendar.DAY_OF_MONTH);
		System.out.println("2:" + yesterday);

	}
}

/**
 今天是11月13号,再加18天是下个月的1号
 1:13
 2:1
 */

//月卡

package com.jicent.magicgirl.model.other;

import com.jicent.magicgirl.utils.SPData;

/**
 * 月卡功能
 * @author jianan
 *
 */
public class MonthCard {
	private long endTime;  //月卡到期的时间
	private static MonthCard instance = null;
	
	//购买一次月卡
	public void buyOnce(){
		final long thirtyDaysDis = 30 * 24 * 60 * 60 * 1000L;  //30天的间隔
		
		if(endTime == -1L){  //第一次购买月卡
			endTime = System.currentTimeMillis() + thirtyDaysDis;
		}else{
			endTime += thirtyDaysDis;
		}
		SPData.getInstance().setEndTime(endTime);
	}
	
	//月卡剩余天数
	public long getMonthCardRemainDays(){
		long currTime = System.currentTimeMillis();
		if(currTime >= endTime){ //如果到期了,则设置-1
			endTime = -1;
			SPData.getInstance().setEndTime(endTime);
			return 0;
		}else{
			return haoMiao2Day(endTime - currTime);
		}
	}
	
	//毫秒转化为天
	private long haoMiao2Day(long time){
		final long oneDay = 24 * 60 * 60 * 1000L;
		if(time == 0 || time % oneDay == 0){
			return time/oneDay;
		}else{  //剩余不到一天,那么按照一天计算
			return time/oneDay + 1;
		}
	}
	
	//获取唯一实例
	public static MonthCard getInstance(){
		if(instance == null){
			instance = new MonthCard();
		}
		return instance;
	}
	
	//私有构造方法
	private MonthCard() {
		endTime = SPData.getInstance().getEndTime();
	}
}
注意:long后必须加个L,可以看到int最多11,long做多19位。不加L可能导致当int转化为Long时候溢出。
System.out.println(Integer.MAX_VALUE);  //2147483647
System.out.println(Long.MAX_VALUE);     //9223372036854775807







你可能感兴趣的:(java)