【Java】时间戳转耗时时长

目录

一、方法

1、代码

2、使用示例

二、工具类

1、代码

2、使用示例

三、项目地址

1、GitHub

2、Gitee


一、方法

1、代码

public static String convert(long timestamp) {if (timestamp <= 0) {return "0s";}long oneSecond = 1000;long oneMinute = 60 * oneSecond;long oneHour = 60 * oneMinute;long oneDay = 24 * oneHour;int d = 0;int h = 0;int m = 0;int s = 0;String result = "";if (timestamp >= oneDay) {d = (int) (timestamp / oneDay);result += d + "d";}timestamp -= d * oneDay;if (timestamp >= oneHour) {h = (int) (timestamp / oneHour);result += h + "h";}timestamp -= h * oneHour;if (timestamp >= oneMinute) {m = (int) (timestamp / oneMinute);result += m + "m";}timestamp -= m * oneMinute;if (timestamp >= oneSecond) {s = (int) (timestamp / oneSecond);result += s + "s";}timestamp -= s * oneSecond;if (timestamp > 0) {result += timestamp + "ms";}return result;
}

2、使用示例

public static void main(String[] args) throws InterruptedException {long startTime = System.currentTimeMillis();// 模拟业务代码运行时间Thread.sleep(500);long endTime = System.currentTimeMillis();System.out.println(convert(endTime - startTime));
}
public static void main(String[] args) throws InterruptedException {long startTime = System.currentTimeMillis();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");System.out.println("[开始时间] " + sdf.format(startTime));// 模拟业务代码运行时间Thread.sleep(500);long endTime = System.currentTimeMillis();System.out.println("[结束时间] " + sdf.format(endTime));System.out.println("[运行时间] " + convert(endTime - startTime));
}

二、工具类

如果需要在多处使用,并且开始时间和结束时间都要打印,会有点繁琐。为了便捷使用,设置了一个工具类。

1、代码


import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;/*** Print time-consuming(eg: 1h23m20s50ms). <br/>* -step1: addStartTime() <br/>* -step2: addEndTime() <br/>* -step3: print() <br/>* Steps 1 to 3 are a set of operations that can be looped. Calling addStartTime() and addEndTime()* will print the current time in the format of "yyyy-MM-dd HH:mm:ss.S". The method addStartTime()* and addEndTime() must match each other, otherwise output NULL.*/
public class TimeConsume {private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");private final List<Long> startTime;private final List<Long> endTime;private int point;public TimeConsume() {this.startTime = new ArrayList<>();this.endTime = new ArrayList<>();this.point = 0;}/**** Print current time(simple date format is "yyyy-MM-dd HH:mm:ss.S") and add current time to* startTime.*/public void addStartTime() {long currentTimeMillis = System.currentTimeMillis();System.out.println("[start time] " + sdf.format(currentTimeMillis));this.startTime.add(currentTimeMillis);}/**** Print current time(simple date format is "yyyy-MM-dd HH:mm:ss.S") and add current time to* endTime.*/public void addEndTime() {long currentTimeMillis = System.currentTimeMillis();System.out.println("[end time] " + sdf.format(currentTimeMillis));this.endTime.add(currentTimeMillis);}/**** Print time-consuming(eg: 1h23m20s50ms). If the start time and end time do not match each* other, output empty. This method can be reused.*/public void print() {try {System.out.println("[time-consuming] "+ convert(this.endTime.get(point) - this.startTime.get(point)));} catch (Exception e) {System.out.println("[time-consuming] NULL");}this.point++;}/**** timestamp convert to time-consuming* * @param timestamp long timestamp* @return time-consuming string, eg: 1d, 12h32m45s123ms, 1h23m20s50ms, 5min2s, 10s, 520ms*/public String convert(long timestamp) {if (timestamp <= 0) {return "0s";}long oneSecond = 1000;long oneMinute = 60 * oneSecond;long oneHour = 60 * oneMinute;long oneDay = 24 * oneHour;int d = 0;int h = 0;int m = 0;int s = 0;String result = "";if (timestamp >= oneDay) {d = (int) (timestamp / oneDay);result += d + "d";}timestamp -= d * oneDay;if (timestamp >= oneHour) {h = (int) (timestamp / oneHour);result += h + "h";}timestamp -= h * oneHour;if (timestamp >= oneMinute) {m = (int) (timestamp / oneMinute);result += m + "m";}timestamp -= m * oneMinute;if (timestamp >= oneSecond) {s = (int) (timestamp / oneSecond);result += s + "s";}timestamp -= s * oneSecond;if (timestamp > 0) {result += timestamp + "ms";}return result;}
}

2、使用示例

public static void main(String[] args) throws InterruptedException {TimeConsume tc = new TimeConsume();tc.addStartTime();// 模拟业务代码运行时间Thread.sleep(500);tc.addEndTime();tc.print();// 可多次调用tc.addStartTime();// 模拟业务代码运行时间Thread.sleep(50);tc.addEndTime();tc.print();
}

三、项目地址

1、GitHub

cxzgwing/toolkit

2、Gitee

cxzgwing/toolkit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42104.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法学习计划】贪心算法(上)

目录 前言&#xff08;什么是贪心&#xff09; leetcode 860.柠檬水找零 leetcode 2208.将数组和减半的最少操作次数 leetcode 179.最大数 leetcode 376.摆动序列 leetcode 300.最长递增子序列 leetcode 334.递增的三元子序列 leetcode 674.最长连续递增序列 leetcode …

Ubuntu 22.04 安装向日葵远程控制

1. 前言 由于公司客户的服务器用是图形化桌面&#xff0c;所以我们需要一个远程控制工具来控制服务器&#xff0c;目前市面上两款比较热门的控制软件就是ToDesk和向日葵了&#xff0c;我们今天就来学习一下向日葵的使用 2. 下载软件 前往向日葵官网下载 向日葵远程控制app官…

Linux网络编程(七)——套接字的多种可选项

文章目录 7 套接字的多种可选项 7.1 套接字可选项和I/O缓冲大小 7.1.1 套接字多种可选项 7.1.2 getsockopt & setsockopt 7.1.3 SO_SNDBUF & SO_RCVBUF 7.2 地址再分配 SO_REUSEADDR 7.2.1 发生地址分配错误&#xff08;Binding Error&#xff09; 7.2.2 Time-…

使用 langchain_deepseek 实现自然语言转数据库查询SQL

文章目录 Github官网简介腾讯云DeepSeek APIDeepSeek APIChatDeepSeek安装相关库创建 .env 文件验证 API 接口 生成数据库查询SQL获取测试用数据库验证数据库查询生成数据库查询SQL Github https://github.com/langchain-ai/langchain 官网 https://python.langchain.com/do…

2025年具有AI招聘管理系统选型及攻略分享

2025年&#xff0c;人工智能的深度渗透让招聘管理系统的竞争从“功能堆砌”转向“智能密度”的较量。企业若想在这场人才争夺战中胜出&#xff0c;选对招聘管理系统已不再是“加分项”&#xff0c;而是“生死线”。 然而&#xff0c;市面上的招聘系统五花八门&#xff0c;从老牌…

vue 自定义 tabs 控件,可自动左右滑动使得选中项居中显示

效果图如下&#xff1a; 录屏如下&#xff1a; tabs录屏 控件用法如下&#xff1a; <navi-tabs :data"tabs" changeTab"changeTab"></navi-tabs>import NaviTabs from "/components/navi-tabs";components: { NaviTabs },tabs: [{ …

HarmonyOS:解决UIAbility调用terminateSelf()后设置不保留最近任务列表中的快照

一、概述 在HarmonyOS应用开发中&#xff0c;UIAbilityContext的terminateSelf()方法被用来结束当前的UIAbility实例。 如果希望在调用terminateSelf()后&#xff0c;让应用在最近任务列表中不保留快照&#xff0c;可以通过在module.json5配置文件中配置removeMissionAfterTe…

el-table下的复选框关联勾选

效果展示&#xff1a; <el-table style"height: 500px;" :data"tableData" border empty-text"暂无数据" v-loading"loading":header-cell-style"{ text-align: center }" :cell-style"{ text-align: center }"…

langchain+ollama+deepseek的部署(win)

ANACONDA 安装 官网&#xff1a;Download Anaconda Distribution | Anaconda 配置系统环境 在系统变量中配置 检查是否配置成功 通过 cmd 窗口输入&#xff1a; conda info 如图&#xff1a;表示成功 配置你的虚拟环境 二、安装 ollama allama 安装 官网地址&#xff1a…

深入理解椭圆曲线密码学(ECC)与区块链加密

椭圆曲线密码学&#xff08;ECC&#xff09;在现代加密技术中扮演着至关重要的角色&#xff0c;广泛应用于区块链、数字货币、数字签名等领域。由于其在提供高安全性和高效率上的优势&#xff0c;椭圆曲线密码学成为了数字加密的核心技术之一。本文将详细介绍椭圆曲线的基本原理…

SQL Server 2008安装教程

目录 一.安装SQL Server 二.安装SQL Server Management Studio 三.使用SQL Server Management Studio 一.安装SQL Server 官网下载:SQL Server 下载 | Microsoft 1.选择安装中的全新安装如下图 2.功能选择 3.实例配置 4.后面一直下一步到数据库引擎配置 密码自己设置 系统…

Microi吾码界面设计引擎之基础组件用法大全【内置组件篇·中】

&#x1f380;&#x1f380;&#x1f380; microi-pageengine 界面引擎系列 &#x1f380;&#x1f380;&#x1f380; 一、Microi吾码&#xff1a;一款高效、灵活的低代码开发开源框架【低代码框架】 二、Vue3项目快速集成界面引擎 三、Vue3 界面设计插件 microi-pageengine …

如何在 Windows 上安装并使用 Postman?

Postman 是一个功能强大的API测试工具&#xff0c;它可以帮助程序员更轻松地测试和调试 API。在本文中&#xff0c;我们将讨论如何在 Windows 上安装和使用 Postman。 Windows 如何安装和使用 Postman 教程&#xff1f;

便携版:随时随地,高效处理 PDF 文件

PDF-XChange Editor Plus 便携版是一款功能强大且极其实用的 PDF 阅读与编辑工具。它不仅支持快速浏览 PDF 文件&#xff0c;还提供了丰富的编辑功能&#xff0c;让用户可以轻松处理 PDF 文档。经过大神优化处理&#xff0c;这款软件已经变得十分轻便&#xff0c;非常适合需要随…

MCP Server 实现一个 天气查询

​ Step1. 环境配置 安装 uv curl -LsSf https://astral.sh/uv/install.sh | shQuestion: 什么是 uv 呢和 conda 比有什么区别&#xff1f; Answer: 一个用 Rust 编写的超快速 (100x) Python 包管理器和环境管理工具&#xff0c;由 Astral 开发。定位为 pip 和 venv 的替代品…

MySQL执行计划

MySQL 的 执行计划&#xff08;Execution Plan&#xff09; 是优化器根据 SQL 语句生成的查询执行路径的详细说明。通过分析执行计划&#xff0c;可以了解 MySQL 如何处理 SQL 查询&#xff08;如索引使用情况、表连接顺序等&#xff09;&#xff0c;进而优化查询性能。 1. 获…

数据大屏点亮工业互联网的智慧之眼

在当今数字化飞速发展的时代&#xff0c;数据已成为企业决策的核心依据&#xff0c;而数据大屏作为数据可视化的重要工具&#xff0c;正逐渐成为工业互联网领域不可或缺的一部分。通过直观、动态的可视化展示&#xff0c;数据大屏能够将复杂的数据转化为易于理解的图表和图形&a…

GPT-SoVITS本地部署:低成本实现语音克隆远程生成音频全流程实战

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天要给大家安利一个绝对能让你大呼过瘾的声音黑科技——GPT-SoVITS&#xff01;这款由花儿不哭大佬精心打造的语音克隆神…

【AI大模型】DeepSeek + 通义万相高效制作AI视频实战详解

目录 一、前言 二、AI视频概述 2.1 什么是AI视频 2.2 AI视频核心特点 2.3 AI视频应用场景 三、通义万相介绍 3.1 通义万相概述 3.1.1 什么是通义万相 3.2 通义万相核心特点 3.3 通义万相技术特点 3.4 通义万相应用场景 四、DeepSeek 通义万相制作AI视频流程 4.1 D…

【Unity】合批处理和GPU实例化的底层优化原理(完)

【Unity】批处理和实例化的底层优化原理 URP1.基础概念SetPassCallsDrawCallsBatches 2.重要性排序既然如此为什么仍然要合批&#xff1f; 3.unity主流的合批优化方案和优先级Early-Z透明物体情况 4.合批&#xff08;小场景但是很复杂很多小物件刚需&#xff09;合并纹理图集更…