zoukankan      html  css  js  c++  java
  • 考勤时间计算

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"io/ioutil"
    	"os"
    	"strconv"
    	"time"
    )
    
    type ResponseStruct struct {
    	Signs []Sign `json:"signs"`
    }
    
    type Sign struct {
    	InTime  string `json:"inTime"`
    	OutTime string `json:"outTime"`
    	WorkDay bool   `json:"workDay"`
    }
    
    func main() {
    	jsonFile, err := os.Open("data.json")
    	if err != nil {
    		fmt.Println(err)
    	}
    	defer jsonFile.Close()
    
    	byteValue, err := ioutil.ReadAll(jsonFile)
    	if err != nil {
    		fmt.Printf("ReadAll error: %s
    ", err)
    	}
    
    	var response ResponseStruct
    
    	err = json.Unmarshal(byteValue, &response)
    	if err != nil {
    		fmt.Println(err)
    	}
    
    	data, err := json.MarshalIndent(response.Signs, "", "    ")
    	if err != nil {
    		fmt.Printf("JSON marshaling failed: %s", err)
    	}
    
    	fmt.Printf("%s
    ", data)
    	layout := "2006-01-02 15:04:05"
    
    	var sum_minute int = 0
    	var sum_hour float32 = 0.0
    	var sum_minute2 int = 0
    	var sum_hour2 float32 = 0.0
    	var monthString string
    	fmt.Printf("Please enter the KaoQin month: ")
    	fmt.Scanln(&monthString)
    
    	for _, value := range response.Signs {
    		var KaoqinMonth time.Month
    		Kaoqin, err := strconv.Atoi(monthString)
    		if err != nil {
    			fmt.Println(err)
    		}
    		KaoqinMonth = time.Month(Kaoqin)
    		//工作日加班时长
    		if value.WorkDay && value.OutTime != "" {
    			formatTime, err := time.Parse(layout, value.OutTime)
    			fmt.Printf("工作日:%v
    ", formatTime)
    			if err != nil {
    				fmt.Println("%s", err)
    			}
    			if formatTime.Month() == KaoqinMonth {
    				if formatTime.Hour() >= 18 {
    					sum_minute += formatTime.Minute()
    					sum_hour += float32(formatTime.Hour() - 18)
    				}
    
    			}
    			if KaoqinMonth == 12 {
    				KaoqinMonth = 0
    			}
    			if formatTime.Month() == KaoqinMonth+1 && formatTime.Day() <= 19 {
    				if formatTime.Hour() >= 18 {
    					sum_minute += formatTime.Minute()
    					sum_hour += float32(formatTime.Hour() - 18)
    				}
    			}
    			if formatTime.Month() == KaoqinMonth+1 && formatTime.Day() >= 20 {
    				if formatTime.Hour() >= 18 {
    					sum_minute2 += formatTime.Minute()
    					sum_hour2 += float32(formatTime.Hour() - 18)
    				}
    			}
    
    		}
    
    		//周末加班时长
    		if !value.WorkDay && value.OutTime != "" {
    			startTime, err := time.Parse(layout, value.InTime)
    			if err != nil {
    				fmt.Println("%s", err)
    			}
    
    			endTime, err := time.Parse(layout, value.OutTime)
    			if err != nil {
    				fmt.Println("%s", err)
    			}
    
    			fmt.Printf("周末:
    startTime: %s
    endTime: %s
    ", startTime, endTime)
    			if startTime.Month() == KaoqinMonth {
    				sum_minute += 60 + endTime.Minute() - startTime.Minute()
    				sum_hour += float32(endTime.Hour() - startTime.Hour() - 1)
    			}
    			if KaoqinMonth == 12 {
    				KaoqinMonth = 0
    			}
    			if startTime.Month() == KaoqinMonth+1 && startTime.Day() <= 19 {
    				sum_minute += 60 + endTime.Minute() - startTime.Minute()
    				sum_hour += float32(endTime.Hour() - startTime.Hour() - 1)
    			}
    			if startTime.Month() == KaoqinMonth+1 && startTime.Day() >= 20 {
    				sum_minute2 += 60 + endTime.Minute() - startTime.Minute()
    				sum_hour2 += float32(endTime.Hour() - startTime.Hour() - 1)
    			}
    		}
    	}
    	sum_hour += float32(sum_minute) / 60.0
    	sum_hour2 += float32(sum_minute2) / 60.0
    	fmt.Printf("last month and current month <= 19 sum_hour = %f
    ", sum_hour)
    	fmt.Printf("current month >= 20 sum_hour2 = %f
    ", sum_hour2)
    }
    

    原始数据如上,通过按下F12,对浏览器进行调试,获取到response数据,对感兴趣的字段进行反序列化,存储到相应的

    Struct结构体,再进行处理,得到考勤时间。哈哈哈,因为赖得手工去计算,所以就写了个脚本去帮我。

    不能不说,用go处理json数据真是方便呐。

  • 相关阅读:
    eslint 规则
    我的.eslintrc.js
    shell命令
    .sync 修饰符的理解
    【HNOI 2018】寻宝游戏
    【BZOJ 2820】YY的GCD
    【Luogu P2664】树上游戏
    【HAOI 2012】高速公路
    句摘
    【SCOI 2008】奖励关
  • 原文地址:https://www.cnblogs.com/donggongdechen/p/14970795.html
Copyright © 2011-2022 走看看