用java编写某年某月的日历_Java-查询某年某月一个月的数据,以日历的形式展示。...

本文介绍如何使用Java编写接口,查询数据库中某年某月的数据,并以日历的形式展示。通过创建`CalendarDate`类存储每天的信息,利用`DateUtils`工具类结合自定义`Function`处理业务逻辑,灵活获取每一天的用户数据。
摘要由CSDN通过智能技术生成

市场上有些这样的应用,会展示某年某月一个月的数据,比如女神们经常用的“大姨妈”APP,一些游戏的用户签到信息,等等

4e92b592424f73312dad87109f822d69.png

那我们在写后台接口的时候,就需要返回这一个月的数据,今天我就分享一下笔者经常在工作中使用的方法。

数据库DB中存了许多用户的应用数据,每条数据有一个日期字段,可以是Integer类型(yyyyMMdd),可以是String类型(yyyy-MM-dd),还可以是Date类型.

首先定义了一个这样的类来保存某天的数据:

public class CalendarDate{publicInteger day;publicInteger weekDay;publicBoolean isToday;publicT info;

}

四个字段的意思分别是:day-这个月的第几天,weekDay-星期几,isToday-是否是今天,info-该天的用户数据。

请求接口如下,请求需要年和月两个参数:

@GetMapping("/calendar")public List>>calendarDates(@RequestParam Integer year, @RequestParam Integer month) {

Function>> function = day ->{

List datas = new ArrayList<>();

datas.add(day);//DB: datas = tableMapper.findByDay(day);

returnOptional.of(datas);

};returnDateUtils.calendar(year, month, function);

}

重点就是下面封装好的工具类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classDateUtils {public static List> calendar(int year, int month, Function>function) {

List> cdList = new ArrayList<>();int monthDays =monthDays(year, month);

CalendarDatecdR;for (int day = 1; day <= monthDays; day++) {

cdR= new CalendarDate<>();

cdR.day=day;

LocalDate date=LocalDate.of(year, month, day);

cdR.weekDay=dayOfWeek(date);

cdR.isToday=isToday(date);if (function != null) {

Optional optional =function.apply(date.toString());if(optional.isPresent()) {

cdR.info=optional.get();

}

}

cdList.add(cdR);

}returncdList;

}private static booleanisToday(LocalDate date) {

LocalDate today=LocalDate.now();return date.getYear() == today.getYear() &&date.getMonth()== today.getMonth() &&date.getDayOfMonth()==today.getDayOfMonth();

}private static intdayOfWeek(LocalDate date) {return null == date ? 0: date.getDayOfWeek().getValue();

}private static int monthDays(int year, intmonth) {

Calendar calendar=Calendar.getInstance();

calendar.set(Calendar.YEAR, year);

calendar.set(Calendar.MONTH, month- 1);

calendar.set(Calendar.DATE,1);

calendar.roll(Calendar.DATE,-1);returncalendar.get(Calendar.DATE);

}

}

View Code

针对不同的业务要求,编写不一样的function函数,就可以返回日历形式的用户数据了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值