java签到断签重置_MYSQL实现连续签到断签一天从头开始方法实例

本文主要介绍了MYSQL实现连续签到功能断签一天从头开始,非常不错,具有参考借鉴价值,需要的朋友可以参考下,希望能帮助到大家。

1,创建测试表

CREATE TABLE `testsign` (

`userid` int(5) DEFAULT NULL,

`username` varchar(20) DEFAULT NULL,

`signtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`type` int(1) DEFAULT '0' COMMENT '为0表示签到数据,1表示签到日期字典数据'

) ENGINE=InnoDB DEFAULT CHARSET=utf8

2,插入测试数据,签到时间为5.21号到6.5号,可以写活,但是要写存储过程,我比较懒,重点应该是取签到数据的代码,就是第三点,呵呵

insert into `testsign` (`userid`, `username`, `signtime`, `type`) values('72164','字典','2017-05-21 00:00:00','1');

insert into `testsign` (`userid`, `username`, `signtime`, `type`) values('72164

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现连续签到加分的Java代码可以参考以下示例: ``` // 定义签到记录类 public class SignInRecord { private Date signInDate; private int signInScore; public SignInRecord(Date signInDate, int signInScore) { this.signInDate = signInDate; this.signInScore = signInScore; } public Date getSignInDate() { return signInDate; } public int getSignInScore() { return signInScore; } } // 定义签到管理类 public class SignInManager { private List<SignInRecord> signInRecords; private int maxContinuousDays; // 最大连续签到天数 private int continuousDays; // 当前连续签到天数 private int signInScore; // 签到得分 public SignInManager() { signInRecords = new ArrayList<>(); maxContinuousDays = 0; continuousDays = 0; signInScore = 0; } public void signIn() { Date today = new Date(); int score = 1; if (!signInRecords.isEmpty()) { // 判是否连续签到 Date lastSignInDate = signInRecords.get(signInRecords.size() - 1).getSignInDate(); if (isContinuousSignIn(lastSignInDate, today)) { continuousDays++; score = continuousDays; if (continuousDays > maxContinuousDays) { maxContinuousDays = continuousDays; } } else { continuousDays = 1; } } signInRecords.add(new SignInRecord(today, score)); signInScore += score; } public int getMaxContinuousDays() { return maxContinuousDays; } public int getContinuousDays() { return continuousDays; } public int getSignInScore() { return signInScore; } // 判是否连续签到 private boolean isContinuousSignIn(Date lastSignInDate, Date today) { Calendar lastCal = Calendar.getInstance(); lastCal.setTime(lastSignInDate); int lastYear = lastCal.get(Calendar.YEAR); int lastDayOfYear = lastCal.get(Calendar.DAY_OF_YEAR); Calendar todayCal = Calendar.getInstance(); todayCal.setTime(today); int todayYear = todayCal.get(Calendar.YEAR); int todayDayOfYear = todayCal.get(Calendar.DAY_OF_YEAR); return lastYear == todayYear && todayDayOfYear - lastDayOfYear == 1; } } ``` 实现App签到功能的Java代码可以参考以下示例: ``` // 定义签到记录类 public class SignInRecord { private Date signInDate; public SignInRecord(Date signInDate) { this.signInDate = signInDate; } public Date getSignInDate() { return signInDate; } } // 定义签到管理类 public class SignInManager { private List<SignInRecord> signInRecords; public SignInManager() { signInRecords = new ArrayList<>(); } public void signIn() { Date today = new Date(); signInRecords.add(new SignInRecord(today)); } public int getSignInCount() { return signInRecords.size(); } public boolean hasSignedInToday() { if (signInRecords.isEmpty()) { return false; } Date lastSignInDate = signInRecords.get(signInRecords.size() - 1).getSignInDate(); Calendar lastCal = Calendar.getInstance(); lastCal.setTime(lastSignInDate); int lastYear = lastCal.get(Calendar.YEAR); int lastDayOfYear = lastCal.get(Calendar.DAY_OF_YEAR); Calendar todayCal = Calendar.getInstance(); int todayYear = todayCal.get(Calendar.YEAR); int todayDayOfYear = todayCal.get(Calendar.DAY_OF_YEAR); return lastYear == todayYear && lastDayOfYear == todayDayOfYear; } } ``` 这两份代码仅供参考,实际应用中还需要根据业务需求进行相应的调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值