Mac OS终端Shell时间追踪脚本:如何计算并追加工作时长
时间追踪脚本扩展:计算工作时长并追加记录
现有脚本基础
已有用于MacOS终端的时间追踪Shell脚本,包含两个核心函数:
start:向~/Documents/wrk.txt写入START 日-月-年 时:分:秒格式的开始记录,并输出终端提示stop:向同文件写入STOP 日-月-年 时:分:秒格式的结束记录,并输出终端提示
基础函数代码:
start() { local timestamp=$(date +"%d-%m-%Y %H:%M:%S") echo "START $timestamp" >> ~/Documents/wrk.txt echo "已记录开始时间:$timestamp" } stop() { local timestamp=$(date +"%d-%m-%Y %H:%M:%S") echo "STOP $timestamp" >> ~/Documents/wrk.txt echo "已记录结束时间:$timestamp" }
执行后wrk.txt示例内容:
START 10-08-2022 08:00:00 STOP 10-08-2022 08:06:33
需求实现:计算并追加工作时长
需要实现一个函数,提取wrk.txt最后两行,去除START/STOP标识后计算时间差,最终以totalworktime: 时:分:秒格式追加到原文件。
实现代码
添加以下calc_worktime函数:
calc_worktime() { local wrk_file=~/Documents/wrk.txt # 提取最后两行并去除前缀标识 local start_time=$(tail -n 2 "$wrk_file" | head -n 1 | sed 's/^START //') local stop_time=$(tail -n 1 "$wrk_file" | sed 's/^STOP //') # 将自定义时间格式转为Unix时间戳(适配MacOS date命令) local start_epoch=$(date -j -f "%d-%m-%Y %H:%M:%S" "$start_time" +%s) local stop_epoch=$(date -j -f "%d-%m-%Y %H:%M:%S" "$stop_time" +%s) # 计算时间差(秒) local diff_seconds=$((stop_epoch - start_epoch)) # 转换为时分秒格式并补零 local hours=$((diff_seconds / 3600)) local minutes=$(( (diff_seconds % 3600) / 60 )) local seconds=$((diff_seconds % 60)) local formatted_diff=$(printf "%02d:%02d:%02d" $hours $minutes $seconds) # 追加结果到文件并提示 echo "totalworktime: $formatted_diff" >> "$wrk_file" echo "已计算并追加工作时长:$formatted_diff" }
使用方式
执行stop记录结束时间后,直接在终端运行calc_worktime即可完成计算和追加。
效果示例
计算前wrk.txt内容:
START 10-08-2022 08:00:00 STOP 10-08-2022 08:06:33
执行calc_worktime后,文件内容变为:
START 10-08-2022 08:00:00 STOP 10-08-2022 08:06:33 totalworktime: 00:06:33
关键细节说明
- 适配MacOS的
date命令:使用-j参数避免修改系统时间,-f指定输入时间格式,确保能正确解析自定义的日-月-年 时:分:秒格式 - 时间差计算:通过转换为Unix时间戳(秒数)实现精准差值计算,再转换为时分秒格式
- 格式补零:用
printf的%02d确保时、分、秒均为两位数字,符合输出要求
内容的提问来源于stack exchange,提问作者OXYGEN
相关产品推荐
相关产品推荐

