在 javafx 中明智地计算总时间

问题描述 投票:0回答:0

我正在做一个跟踪用户计算机工作时间的项目。我正在为管理员创建前端项目,我必须在其中显示一天的总工作时间。我从服务器获取的数据是 JSONArray,由签入和签出的时间戳组成。现在我必须计算每个日期的总工作时间,因为服务器的响应是整月的。 我必须在表视图 javafx 中显示它。但我无法计算每天的工作时间请帮助我。我正在编写的用于在 tableview 中显示数据的代码是:

    private void PopulateTrackingsList(JSONArray trackingData) {
         ObservableList<Trackings> dataList = FXCollections.observableArrayList();
         ObservableList<Trackings> dataList2 = FXCollections.observableArrayList();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
        for (int i = 0; i < trackingData.length(); i++) {
            JSONObject tracking = trackingData.getJSONObject(i);
            Trackings optTracking = new Trackings();
            LocalDateTime checkInTime = LocalDateTime.parse(tracking.getString("checkIn"), dateTimeFormatter);
            LocalDate key = checkInTime.toLocalDate();
            LocalDateTime checkOutTime = LocalDateTime.parse(tracking.getString("checkOut"), dateTimeFormatter);
            optTracking.setCheckIn(checkInTime);
            optTracking.setCheckOut(checkOutTime);
            if (checkOutTime != null) {
                optTracking.setTotalTime(ChronoUnit.SECONDS.between(checkInTime, checkOutTime));
                optTracking.setHour(optTracking.getTotalTime() / 3600);
                optTracking.setMinute(optTracking.getTotalTime() / 60);
                optTracking.setSecond(optTracking.getTotalTime() % 60);
                optTracking.setTotalTimeCalculated(optTracking.getHour() + " : " + optTracking.getMinute() + " : " + optTracking.getSecond());
            }
            dataList2.add(optTracking);
            
        }
        dataList.addAll(dataList2);
        long total1 = 0;
        for(int i=0;i<dataList2.size()-1;i++){
            Trackings t = new Trackings();
            if(dataList2.get(i).getCheckIn().getDayOfMonth()==dataList2.get(i+1).getCheckIn().getDayOfMonth()){
                total1 = total1+dataList2.get(i).getTotalTime();
            }else{
                t.setTotalTimeCalculated(String.valueOf(total1));
                dataList.add(i+1,t);   
        }
        }
      
        checkIn_column.setCellValueFactory(new PropertyValueFactory<>("checkIn"));
        checkOut_column.setCellValueFactory(new PropertyValueFactory<>("checkOut"));
        totalTime_column.setCellValueFactory(new PropertyValueFactory<>("totalTimeCalculated"));
        tracking_tbl.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        tracking_tbl.setItems(dataList);
        long total = 0;
        for (Trackings item : tracking_tbl.getItems()) {
            total = total + item.getTotalTime();
        }
        totalTime.setText("Total Time This month : " + total / 3600 + " : " + total / 60 + " : " + total % 60);
        //tracking_tbl.getItems().add(new Trackings());
    }

data of JSONArray is like:  { "id": "643ce45df0ee377be09455ec", "userId": "64194a50c391c95dc37af01a", "checkIn": "17-04-2023 11:47:01", "checkOut": "17-04-2023 11:47:45", "isActive": true }, { "id": "643ce494f0ee377be09455ed", "userId": "64194a50c391c95dc37af01a", "checkIn": "17-04-2023 11:47:56", "checkOut": "17-04-2023 11:49:11", "isActive": true }, { "id": "643ce4e2f0ee377be09455ee", "userId": "64194a50c391c95dc37af01a", "checkIn": "17-04-2023 11:49:14", "checkOut": "17-04-2023 11:50:04", "isActive": true } 

帮我计算用户每天的总时间

javafx tableview
© www.soinside.com 2019 - 2024. All rights reserved.