计算时间差,你的方式或许不是最佳实践!

从时间差计算到性能优化:Qt中secsTo方法的隐藏陷阱与实战技巧 本文深入探讨了Qt框架中`secsTo`方法在时间差计算中的精度陷阱与性能优化策略。通过分析`QDateTime`和`QTime`的使用场景,揭示了跨时区和毫秒级精度问题,并提供了高效替代方案和实战代码模板,帮助开发者避免常见错误并提升计算性能。 阅读详情

 

我们计算两段代码时间差,很多同学公司的代码是采用以下这种方式。

long startTime = System.currentTimeMillis();
// 执行代码
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);

首先先说明,这种方式并不是不行。按照“能跑就行”的原则,这段代码,肯定是能用的!但是这并不是最佳实践,为何?

我们先来看一下JDK中的注释

/**
 * Returns the current time in milliseconds.  Note that
 * while the unit of time of the return value is a millisecond,
 * the granularity of the value depends on the underlying
 * operating system and may be larger.  For example, many
 * operating systems measure time in units of tens of
 * milliseconds.
 *
 * <p> See the description of the class <code>Date</code> for
 * a discussion of slight discrepancies that may arise between
 * "computer time" and coordinated universal time (UTC).
 *
 * @return  the difference, measured in milliseconds, between
 *          the current time and midnight, January 1, 1970 UTC.
 * @see     java.util.Date
 */
public static native long currentTimeMillis();

当然,毕竟有的同学英文能力有限,那就只能用之前介绍的文档神器来开门见山了

 

 

 

虽然文中的每个字都认识,但是这段话想表达的意思你可能还是不太清楚,有句话叫做,不怕现实,就怕对比。那么我们来看另外一种方式。

long startTime = System.nanoTime();
// 执行代码
long endTime = System.nanoTime();
System.out.println(endTime - startTime);

同样的,我们再来看看注释

/**
 * Returns the current value of the running Java Virtual Machine's
 * high-resolution time source, in nanoseconds.
 *
 * <p>This method can only be used to measure elapsed time and is
 * not related to any other notion of system or wall-clock time.
 * The value returned represents nanoseconds since some fixed but
 * arbitrary <i>origin</i> time (perhaps in the future, so values
 * may be negative).  The same origin is used by all invocations of
 * this method in an instance of a Java virtual machine; other
 * virtual machine instances are likely to use a different origin.
 *
 * <p>This method provides nanosecond precision, but not necessarily
 * nanosecond resolution (that is, how frequently the value changes)
 * - no guarantees are made except that the resolution is at least as
 * good as that of {@link #currentTimeMillis()}.
 *
 * <p>Differences in successive calls that span greater than
 * approximately 292 years (2<sup>63</sup> nanoseconds) will not
 * correctly compute elapsed time due to numerical overflow.
 *
 * <p>The values returned by this method become meaningful only when
 * the difference between two such values, obtained within the same
 * instance of a Java virtual machine, is computed.
 *
 * <p> For example, to measure how long some code takes to execute:
 *  <pre> {@code
 * long startTime = System.nanoTime();
 * // ... the code being measured ...
 * long estimatedTime = System.nanoTime() - startTime;}</pre>
 *
 * <p>To compare two nanoTime values
 *  <pre> {@code
 * long t0 = System.nanoTime();
 * ...
 * long t1 = System.nanoTime();}</pre>
 *
 * one should use {@code t1 - t0 < 0}, not {@code t1 < t0},
 * because of the possibility of numerical overflow.
 *
 * @return the current value of the running Java Virtual Machine's
 *         high-resolution time source, in nanoseconds
 * @since 1.5
 */
public static native long nanoTime();

此时我们再拿出神器:

 

 

 

从文中的描述加代码示例,告诉我们:

 

 

 

还是那句话,不怕现实,就怕对比。就算你完全不懂代码,根据小学的语文理解,都能看出在计算代码执行时间差上,选哪个方式,才是最佳实践。

最后,我们再看一下阿里巴巴开发手册给我们的建议:

 

 

 

你的代码是怎么计算时间差的,欢迎留言。

PGSQL时间差计算实战:从分钟差到业务告警(附超时工单查询SQL) 本文深入探讨了PGSQL时间差计算在业务告警系统中的应用,特别是工单超时监控场景。通过对比不同时间差计算方案的性能与精度,结合实际案例展示了如何优化查询、设计多级预警系统,并集成定时任务与可视化监控工具,为企业级运维提供高效解决方案。 阅读详情

相关推荐

【Flutter】Flutter 计算两个日期的时间差:实现日期间隔的精确计算

在我们的日常生活和工作中,经常会遇到需要计算两个日期之间的时间差的情况,例如计算某个活动的持续时间,或者计算两个事件之间的间隔天数。在 Flutter 中,我们可以使用 Dart 的 DateTime 类和 DateFormat 类来实现这个功能。

Code Metaverse 2326

数据库日期比较差一天的原因和解决

日期比较固定是左闭右开,大于等于和大于并不会改变日期的归属

weixin_45642669的博客 1134

计算2个日期之间的时间差

本人做的一个项目中使用到的一个功能 特地分离出来 复制粘贴即用

js工具函数:获取当前时间

javascript函数:将当前时间存入django-mysql 利用此函数可将当前时间转为sql可识别的日期时间类 function get_time_now() { let date = new Date(); let year = date.getFullYear(); let month = date.getMonth() + 1; let day = date.getDa...

alicinya的博客 346

精准时间差计算

自己用MFC编写的一个计算时间差的软件,你可以输入一个时间,软件会自动采集电脑的时间,然后经过计算分别以天、时、分、秒的格式转换出来。比如,你输入初恋开始日期,就可以通过该软件知道你们一起走过的时间!是不是很赞!请多多支持!

日期差值计算器,计算两个日期之间差多少天

这是一个非常简单好用的东东,用于简单计算两个日期之间的差值。

notion表(数据库)Formula中常用公式

一、属性(列名-properties) prop(“属性”) 返回每个条目的“属性值”,点击即可用对应的格式插入到公式中。 公式(Formula)中的四种方式 四种格式{数字日期字符串复选框四种格式\begin{cases} 数字 & \\ 日期 & \\字符串 &\\复选框 & \end{cases}四种格式⎩⎪⎪⎪⎨⎪⎪⎪⎧​数字日期字符串复选框​​ 二、常量(constants) 常量{e自然对数的底数pi圆周率true真flase假常量\begin{

꧁༺༽༾ཊ灵࿈悟ཏ༿༼༻꧂的博客 1万+

js计算两个时间的时间差

js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差js计算时间差

日期时间差的计算--C++

实现方法:将时间点转换成基于当前系统的日期时间节点,分别得到一个较大的整数,然后做差值计算得到时间差,之后将这个以秒为单位的时间差转换成日期时间差。以下是实现代码。 主函数 #include <iostream> #include <ctime> using namespace std; int main( ) { struct tm t1,t2; ...

air_shark 3400

DisplayPort 1.4数据扰码实战:16bit LFSR并行优化技巧(附Verilog代码)

本文深入探讨了DisplayPort 1.4协议中16bit数据扰码的并行化实现。针对高带宽视频传输需求,文章详细推导了16位LFSR(线性反馈移位寄存器)的单周期16步并行计算公式,并提供了可直接使用的Verilog代码,解决了传统8bit串行处理吞吐量不足的瓶颈,为高速接口设计提供了关键优化技巧。

y4z5a6b7的博客 259

香橙派R1 Plus LTS变身无线AP/客户端:手把手教你用RTL8811CU和MT7601U网卡刷OpenWRT

本文详细介绍了如何将香橙派R1 Plus LTS开发板通过RTL8811CU和MT7601U两款USB无线网卡刷入OpenWRT系统,实现无线AP热点发射与客户端接入的双重功能。从硬件选型、驱动安装到双网卡协同配置,提供完整的实战指南,帮助用户快速搭建稳定高效的无线网络解决方案。

weixin_30919429的博客 410

Pendulum时间差计算终极指南:从秒到年的精确时间间隔管理

Pendulum是Python中一个强大的日期时间处理库,专门为解决标准datetime模块在处理时间差计算时的复杂性而设计。通过Pendulum的时间差计算功能,你可以轻松计算任意两个时间点之间的精确间隔,从微秒到年,都能获得直观易懂的结果。🚀 ## 为什么需要专业的时间差计算工具? 在日常开发中,时间差计算是一个常见但容易出错的任务。Python标准库的timedelta在处理复杂时间间

gitblog_00134的博客 741

AMD锐龙笔记本隐藏玩法:分核降压+ PBO2超频全攻略(以5900HX/6900HX为例)

本文详细解析了AMD锐龙笔记本(以5900HX/6900HX为例)的分核降压与PBO2超频技术,帮助用户释放处理器隐藏性能。通过BIOS设置、Curve Optimizer参数调整及稳定性测试,实现性能提升与温度控制的完美平衡,适合硬件爱好者进阶调校。

weixin_30617737的博客 352

深入解析git-hours:如何通过commit时间差精准计算开发工作量

**git-hours** 是一个强大的Git仓库时间估算工具,能够通过分析commit时间差来精准计算开发者在项目中的实际工作时间。对于团队管理者、项目经理和开发者来说,这个工具提供了宝贵的项目时间分析数据,帮助量化开发投入,优化工作流程。 ## 🔍 git-hours的核心功能是什么? git-hours的核心功能是通过智能分析Git提交历史,估算开发者在项目中投入的实际工作时间。它基于

gitblog_00034的博客 669

Informer:比Transformer更有效的长时间序列预测

目录 AAAI 2021最佳论文:比Transformer更有效的长时间序列预测 Background Why attention Methods:the details of Informer Solve_Challenge_1:最基本的一个思路就是降低Attention的计算量,仅计算一些非常重要的或者说有代表性的Attention即可,一些相近的思路在近期不断的提出,比如Sparse-Attention,这个方法涉及了稀疏化Attention的操作,来减少Attention计算量,然后涉及的

To be a better man 1万+

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1216

C#工时计算:从字符串解析到时间差计算的完整实现与优化

本文针对工时计算需求,提出一个优化的C#解决方案。原始代码通过字符串截取解析时间并计算差值,但存在输入验证缺失、代码重复和计算逻辑错误等问题。优化方案采用DateTime.TryParseExact方法安全解析时间,增强输入验证,修正工时计算逻辑(使用TimeSpan.TotalHours),并将功能模块化为可复用的工具类。改进后的代码支持错误处理、时间顺序验证,并提供兼容原始方法的接口。文章还建议扩展功能(多格式支持、工作日计算)和最佳实践(输入验证、日志记录、单元测试),最终实现了一个健壮、可维护的生产

德仔 2333

[QMT量化交易小白入门]-三十七、QMT中如何使用类似于通达信中的VBA函数(量化python代码解析)

这段代码主要围绕着在QMT环境中实现类似通达信VBA函数的功能展开,核心功能是基于RSI指标来判断股票的买卖时机,并根据持仓情况进行相应的交易操作。class G():passg = G()这里定义了一个空类G,并创建了该类的实例g。这个实例g将作为全局变量来存储一些在整个程序运行过程中需要共享的数据,例如除复权类型、股票代码、目标数量等。1、使用VBA开发策略时,参数固化的问题会带来一些限制,比如无法修改MA函数的周期参数,只能使用固定周期。

木头大左的博客 1702

java时间差计算,彻底帮你搞懂

前言 在学习Java基础的过程中,泛型绝对算得上是一个比较难理解的知识点,尤其对于初学者而言,而且就算是已经有基础的Java程序员,可能对泛型的理解也不是那么透彻,属于那种看了明白,时间长了就忘的那种,究其根本,还是对泛型不够理解。 大部分人对泛型的认识:“基础知识,但是比较模糊” Linux 专题 微服务专题 微服务架构有哪些优势? 微服务有哪些特点? 设计微服务的最佳实践是什么? 微服务架构如何运作? 微服务架构的优缺点是什么? 单片,SOA 和微服务架构有什么区别? 在使用微服务架构时,您面临哪些

m0_56830858的博客 231

Yocto开发讲解系列 - 总目录

Yocto开发讲解系列总纲Yocto开发专栏前言

fulinux的博客 3万+

二维光子晶体禁带的遗传优化算法实现

二维光子晶体禁带的遗传优化算法MATLAB源代码 光子晶体中因周期性结构而存在的频率禁带称为光子禁带,光子禁带的存在是光子晶体具有广泛应用前景的重要原因。 禁带越大,可控光的频带也越宽,因此如何设计合适的晶体结构以获得大的光子禁带一直是研究和应用的重点与热点。 给大家讲解在平面波展开法的基础上,使用遗传算法寻找具有最大光子禁带的二维光子晶体结构。 %-------------------------------------------------------------------------- % Ph

m0_53407570的博客 583

【SQL语句】求时间差的函数-timestampdiff() 以及取绝对值(abs)

MySQL 中计算时间差的终极解决方案是 TIMESTAMPDIFF() 函数配合 ABS(),支持20+种时间单位计算。本文详细介绍了其核心语法、常用单位、实用SQL示例(如订单超时判断、倒计时等),并总结了常见错误和性能优化技巧(如避免ABS导致索引失效)。相比其他数据库,MySQL的这一组合功能最强大灵活,是处理时间差计算的理想选择。

likuoelie的博客 1044

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Universal Android Debloater时间格式化:chrono库处理时间显示的最佳实践

在开发跨平台Android设备去膨胀工具Universal Android Debloater(UAD)时,时间处理是一个关键的技术需求。无论是日志记录、备份文件命名还是用户界面中的时间显示,都需要精确且用户友好的时间格式化。本文将深入探讨UAD项目中如何使用Rust的chrono库来实现专业的时间处理方案。 ## 时间处理在UAD中的核心应用场景 ### 1. 日志系统时间戳 UAD的日志系...

gitblog_00040的博客 705

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python/Excel/MySQL/飞书多维表格时间差计算全攻略

时间差计算是数据处理和办公自动化中的基础且高频的需求,其核心原理在于将时间点转换为可计算的数值或对象,然后进行差值运算。掌握这一技术能显著提升工作效率,减少人工计算错误,其技术价值在于将重复性工作自动化、标准化。在考勤统计、项目周期分析、实验数据记录等应用场景中,精确的时分秒间隔计算尤为关键。本文聚焦于这一通用需求,通过对比Python、Excel、MySQL和飞书多维表格等不同平台,详细拆解了实现逻辑与代码实践。例如,在Python中利用`datetime`和`timedelta`模块,可以轻松处理跨天计

weixin_30617695的博客 293

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

时间差计算工具: time_diff 使用指南

时间差计算工具: time_diff 使用指南 项目介绍 time_diff 是一个由 Abhidsm 开发的 GitHub 开源项目,旨在提供简单的日期时间差计算功能。它可以帮助开发者轻松计算两个时间点之间的时间间隔,非常适合那些需要在应用程序中进行日期或时间对比分析的场景。项目基于 Python 实现,简单易用且高效。 项目快速启动 要快速开始使用 time_diff,首先确保您的开发环境中...

gitblog_00358的博客 764
上一篇: Maxwell读取MySQL binlog日志到Kafka!
下一篇: 如何给女朋友解释什么是BIO、NIO和AIO?
加班不秃顶
博客等级 码龄7年 1822粉丝 599原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值