if(localDate.toString().equals(formattedDate)){ if (lastAttendance.getNumber()==2){ return "今天已经签到2次了"; } if (lastAttendance.getNumber()==1){ if (localTime.isBefore(LocalTime.of(17, 0))){ attendance.setType("下班早退"); attendance.setNumber(2); attendanceService.save(attendance); return "success"; }else { attendance.setType("下班签到"); attendance.setNumber(2); attendanceService.save(attendance); return "success"; } }else { if (localTime.isBefore(LocalTime.of(9, 0))){ attendance.setType("上班签到"); attendance.setNumber(1); }else { attendance.setType("上班迟到"); attendance.setNumber(1); } } } if(!localDate.equals(formattedDate)){ if (localTime.isBefore(LocalTime.of(9, 0))){ attendance.setType("上班签到"); attendance.setNumber(1); }else { attendance.setType("上班迟到"); attendance.setNumber(1); } } attendanceService.save(attendance); return "success"; } public static void main(String[] args) { // 获取当前本机时间 LocalDateTime now = LocalDateTime.now(); LocalTime localTime = now.toLocalTime(); if (localTime.isAfter(LocalTime.of(17, 0))){ System.out.println("下班"); }else { System.out.println("早退"); } } }
时间: 2024-02-14 13:05:49 浏览: 188
这段代码看起来是 Java 代码,主要是实现了一个考勤签到的功能。首先,通过获取当前的本机时间,判断是否已经签到过。如果已经签到过,就根据签到次数和时间判断是上班迟到、下班早退还是再次签到,并将考勤信息保存到数据库中。如果没有签到过,就根据当前时间判断是上班签到还是上班迟到,并将考勤信息保存到数据库中。另外,代码末尾还有一个判断当前时间是否在下班时间之后的功能。
相关问题
public String addAttendance(HttpSession session) { Integer userId = (Integer) session.getAttribute("userid"); // Integer userId =1; LocalDateTime now = LocalDateTime.now(); Attendance lastAttendance = attendanceService.getByAscTime(userId); Attendance attendance = new Attendance(); attendance.setUserid(userId); attendance.setDate(Date.from(now.atZone(ZoneId.systemDefault()).toInstant())); // 获取当前本机时间 LocalDate localDate = now.toLocalDate(); LocalTime localTime = now.toLocalTime(); // 判断数据库没有打卡记录或者有下班签到 if (lastAttendance == null || lastAttendance.getType().equals("下班签到")) { if (localTime.isBefore(LocalTime.of(9, 0))) { attendance.setType("上班签到"); } else if (localDate.equals(getLastAttendanceDate(lastAttendance))) { attendance.setType("下班签到"); } else if (localTime.isAfter(LocalTime.of(9, 0))){ attendance.setType("迟到"); }else if (localTime.isBefore(LocalTime.of(9, 17))){ attendance.setType("早退"); } } else { if (localDate.equals(getLastAttendanceDate(lastAttendance))) { if (localTime.isBefore(LocalTime.of(9, 0))) { attendance.setType("上班签到"); } else if (localTime.isBefore(LocalTime.of(17, 0))){ attendance.setType("早退"); }else if (localTime.isBefore(LocalTime.of(17, 0))){ attendance.setType("下班签到"); } } else { if (localTime.isBefore(LocalTime.of(9, 0))) { attendance.setType("上班签到"); } else if (localTime.isAfter(LocalTime.of(9, 0))){ attendance.setType("迟到"); }else if (localTime.isBefore(LocalTime.of(17, 0))){ attendance.setType("早退"); } } } attendanceService.save(attendance); return "success"; } private LocalDate getLastAttendanceDate(Attendance lastAttendance) { if (lastAttendance == null) { return null; } Date date = lastAttendance.getDate(); Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); return instant.atZone(zoneId).toLocalDate(); } }
这段代码是一个Java方法,用于添加考勤记录。接收一个`HttpSession`对象作为参数,从中获取当前用户的id,然后根据当前时间判断考勤类型,并将考勤记录保存到数据库中。
下面是具体的解释:
- `Integer userId = (Integer) session.getAttribute("userid")`:从`HttpSession`对象中获取当前用户的id。
- `LocalDateTime now = LocalDateTime.now()`:获取当前时间。
- `Attendance lastAttendance = attendanceService.getByAscTime(userId)`:根据用户id获取最近一次考勤记录。
- `Attendance attendance = new Attendance()`:创建一个新的考勤记录。
- `attendance.setUserid(userId)`:将当前用户的id设置为考勤记录的用户id。
- `attendance.setDate(Date.from(now.atZone(ZoneId.systemDefault()).toInstant()))`:将当前时间转换成`java.util.Date`类型,并设置为考勤记录的日期。
- `if (lastAttendance == null || lastAttendance.getType().equals("下班签到"))`:判断最近一次考勤记录是否为空或者为“下班签到”。如果是,则当前考勤记录为“上班签到”或“迟到”或“早退”。如果不是,则当前考勤记录为“下班签到”或“早退”。
- `if (localTime.isBefore(LocalTime.of(9, 0)))`:判断当前时间是否早于上午9点。
- `else if (localDate.equals(getLastAttendanceDate(lastAttendance)))`:判断当前日期是否与最近一次考勤记录的日期相同。
- `else if (localTime.isAfter(LocalTime.of(9, 0)))`:判断当前时间是否晚于上午9点。
- `else if (localTime.isBefore(LocalTime.of(9, 17)))`:判断当前时间是否早于上午9点17分。
- `else if (localTime.isBefore(LocalTime.of(17, 0)))`:判断当前时间是否早于下午5点。
- `else if (localTime.isBefore(LocalTime.of(17, 0)))`:判断当前时间是否早于下午5点。
- `attendanceService.save(attendance)`:将考勤记录保存到数据库。
- `return "success"`:返回一个字符串表示操作成功。
LocalDate.now 格式化
`LocalDate.now()` 是 Java 8 中 `java.time.LocalDate` 类的一个静态方法,它返回当前日期,不包括时间部分。如果你想获取当前日期并格式化,可以使用 `DateTimeFormatter` 类来指定输出格式。
以下是一个简单的示例:
```java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 定义日期格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 格式化日期
String formattedDate = currentDate.format(formatter);
System.out.println("Current date: " + formattedDate);
}
}
```
在这个例子中,`ofPattern("yyyy-MM-dd")` 定义了输出格式为 "年-月-日"。你可以根据需要更改这个模式字符串,比如 "MM/dd/yyyy"、"dd/MM/yyyy" 等。
阅读全文