当前位置: 首页 > news >正文

《Java核心技术 卷II》日期和时间API的时间线

日期和时间API

Java1.0的Date类过于简单,大部分被弃用。
Java1.1引入Calendar类,但没有处理诸如闰秒之类的问题。
Java 8引入java.time.API,修正过去缺陷。

时间线

1967年,铯133原子的特性推导出了秒的精确定义。之后由原子钟网络维护官方时间。
1972年开始,偶尔需要插入闰秒来修改时间。闰秒这个痛点,计算机通过临近闰秒之前让时间变慢或快。本地时间并不精确,需要与外部事件服务同步。
Java的Date和Time的API规范要求Java使用的时间尺度为:
  • 每天86400秒
  • 每天正午与官方时间精确匹配
  • 在其他时间点上,以精确定义的方法与官方时间接近匹配。
Instant 表示时间线上的某个点,原点是1970年1月1号午夜开始,每天86400秒推进,精确到纳秒。可追溯10亿年(Instant.MIN),最大值是公元10 0000 0000年的12月31日(希望那时候还有你这个人的痕迹)。
Instant.now() 静态方法会给出当前时刻,可以用equals和compareTo方法来比较两个对象。
可以将Instant对象用作时间戳。
静态方法 Duration.between 得到两个时刻之间的时间差。
时间差可以通过 toNanos,toMillis, getSeconds(特殊关注一下) ,toMinutes,toHours,toDays获得时间长度。
精确到纳秒级
当心上溢问题,long值可以存储300年纳秒数,需要Duration短于这个时间,可以直接转纳秒数。
更长的时间差,可以用long来存储秒数,int来存储纳秒数。
检查某个算法至少比另一个算法快10倍
Duration timeElapsed2 = Duration.between(start2,end2);
boolean overTenTimesFaster = timeElapsed1.multipliedBy(10).minus(timeElapsed2).isNegative();
也可直接使用:
boolean overTenTimesFaster = timeElapsed1.toNanos()*10 < timeElapsed2.toNanos();
注释:Instant和Duration都是不可修改的类,乘法之类的操作后,返回一个新的实例。
使用Instant和Duration类对两个算法计时
package 第6章时间API.timeline;import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.IntStream;/*** 时间线*/
public class Timeline {public static void main(String[] args) {Instant start = Instant.now();runAlgorithm();Instant end = Instant.now();Duration timeElapsed = Duration.between(start, end);long millis = timeElapsed.toMillis();System.out.printf("%d 毫秒数\n", millis);Instant start2 = Instant.now();runAlgorithm2();Instant end2 = Instant.now();Duration timeElapsed2 = Duration.between(start2, end2);System.out.printf("%d 毫秒数\n", timeElapsed2.toMillis());boolean overTenTimesFaster = timeElapsed.multipliedBy(10).minus(timeElapsed2).isNegative();System.out.printf("第一个算法%s比第二个算法快十倍", overTenTimesFaster ? "" : "不");}public static void runAlgorithm() {int size = 10;ArrayList<Integer> list = new Random().ints().map(i -> i % 100).limit(size).boxed().collect(Collectors.toCollection(ArrayList::new));Collections.sort(list);System.out.println(list);}public static void runAlgorithm2() {int size = 10;ArrayList<Integer> list = new Random().ints().map(i -> i % 100).limit(size).boxed().collect(Collectors.toCollection(ArrayList::new));while (!IntStream.range(1, list.size()).allMatch(i -> list.get(i - 1).compareTo(list.get(i)) <= 0)) {Collections.shuffle(list);}System.out.println(list);}}

相关文章:

《Java核心技术 卷II》日期和时间API的时间线

日期和时间API Java1.0的Date类过于简单&#xff0c;大部分被弃用。 Java1.1引入Calendar类&#xff0c;但没有处理诸如闰秒之类的问题。 Java 8引入java.time.API&#xff0c;修正过去缺陷。 时间线 1967年&#xff0c;铯133原子的特性推导出了秒的精确定义。之后由原子钟网络…...

文献阅读 250128-Tropical forests are approaching critical temperature thresholds

Tropical forests are approaching critical temperature thresholds 来自 <Tropical forests are approaching critical temperature thresholds | Nature> 热带森林正在接近临界温度阈值 ## Abstract: The critical temperature beyond which photosynthetic machinery…...

Deepseek的RL算法GRPO解读

在本文中&#xff0c;我们将深入探讨Deepseek采用的策略优化方法GRPO&#xff0c;并顺带介绍一些强化学习&#xff08;Reinforcement Learning, RL&#xff09;的基础知识&#xff0c;包括PPO等关键概念。 策略函数&#xff08;policy&#xff09; 在强化学习中&#xff0c; a…...

Linux 如何使用fdisk进行磁盘相关的操作

简介 fdisk 命令是 Linux 中用于管理磁盘分区的强大文本实用程序。它可以创建、删除、调整大小和修改硬盘上的分区。 基本语法 fdisk [options] <device> <device>&#xff1a;要管理的磁盘&#xff0c;例如 /dev/sda、/dev/nvme0n1 或 /dev/vda 示例用法 列…...

智能客服系统:结合 AI 模型与数据库实现对话与知识检索

智能客服系统在现代企业中起着至关重要的作用。通过结合 生成式 AI 模型 和 向量数据库&#xff0c;可以构建一个能够高效回答用户问题、支持知识检索并实现对话连续性的智能客服系统。 本文将详细讲解如何设计并实现一个基于 Spring AI 的智能客服系统。 1. 系统架构设计 智…...

网易Android开发面试题200道及参考答案 (下)

说明原码、反码、补码的概念 原码:是一种简单的机器数表示法。对于有符号数,最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。比如,对于 8 位二进制数,+5 的原码是 00000101,-5 的原码是 10000101。原码的优点是直观,容易理解,但在进行加减法运算时,…...

《哈佛家训》

《哈佛家训》是一本以教育为主题的书籍&#xff0c;旨在通过一系列富有哲理的故事和案例&#xff0c;传递积极的人生观、价值观和教育理念。虽然它并非直接由哈佛大学官方出版&#xff0c;但其内容深受读者喜爱&#xff0c;尤其是在家庭教育和个人成长领域。 以下是《哈佛家训…...

为AI聊天工具添加一个知识系统 之76 详细设计之17 正则表达式 之4 正则表达式模板

Q712、三“化” &#xff08;使用三种不同的定义方法&#xff1a;规定定义法 -线性回归/内涵定义法--一阶迭代/外延定义法--单调递归&#xff09; 整体形成 一个双人零和 的局面 <Class()外延式, Type()内涵式> Method()规定式。给出 问题“law 是什么”的三种答案&#…...

面试被问的一些问题汇总(持续更新)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

WS2812 梳理和颜色表示方法的对比:RGB和HSV

WS2812 WS2812是一种可编程的LED灯&#xff0c;具有RGB显示效果&#xff0c;可显示的颜色数量为2^24。 常用颜色表示方法 表示方法&#xff1a; RGB 表示 加法混色原理&#xff1a;RGB 颜色模型基于加法混色原理&#xff0c;将红&#xff08;Red&#xff09;、绿&#xff08…...

JAVA实战开源项目:蜗牛兼职平台(Vue+SpringBoot) 附源码

本文项目编号 T 034 &#xff0c;文末自助获取源码 \color{red}{T034&#xff0c;文末自助获取源码} T034&#xff0c;文末自助获取源码 目录 一、系统介绍1.1 平台架构1.2 管理后台1.3 用户网页端1.4 技术特点 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景…...

C++:多继承习题3

题目内容&#xff1a; 声明一个时间类Time&#xff0c;时间类中有3个私有数据成员(Hour&#xff0c;Minute&#xff0c;Second)和两个公有成员函数(SetTime和PrintTime)。要求&#xff1a; &#xff08;1&#xff09; SetTime根据传递的3个参数为对象设置时间&#xff1b; &a…...

【云安全】云原生-K8S-搭建/安装/部署

一、准备3台虚拟机 务必保证3台是同样的操作系统&#xff01; 1、我这里原有1台centos7&#xff0c;为了节省资源和效率&#xff0c;打算通过“创建链接克隆”2台出来 2、克隆之前&#xff0c;先看一下是否存在k8s相关组件&#xff0c;或者docker相关组件 3、卸载原有的docker …...

06-AD向导自动创建P封装(以STM32-LQFP48格式为例)

自动向导创建封装 自动向导创建封装STM32-LQFP48Pin封装1.选则4排-LCC或者QUAD格式2.计算焊盘相定位长度3.设置默认引脚位置(芯片逆时针)4.特殊情况下:加额外的标记 其他问题测量距离:Ctrl M测量 && Ctrl C清除如何区分一脚和其他脚?芯片引脚是逆时针看的? 自动向导…...

linux监控脚本+自动触发邮件发送

linux脚本 需求&#xff1a; CPU 负载&#xff1a;使用 uptime 命令&#xff0c;我们可以清楚地了解系统的 CPU 负载情况。这个命令会显示系统在过去 1 分钟、5 分钟和 15 分钟的平均负载。高负载可能意味着系统正在处理大量的任务&#xff0c;可能会导致性能下降或服务响应延迟…...

【漫话机器学习系列】066.贪心算法(Greedy Algorithms)

贪心算法&#xff08;Greedy Algorithms&#xff09; 贪心算法是一种逐步构建解决方案的算法&#xff0c;每一步都选择当前状态下最优的局部选项&#xff08;即“贪心选择”&#xff09;&#xff0c;以期望最终获得全局最优解。贪心算法常用于解决最优化问题。 核心思想 贪心选…...

代码随想录算法训练营第三十八天-动态规划-完全背包-279.完全平方数

把目标值当作背包容量&#xff0c;每个平方数当作物品&#xff0c;题目变更为装满指定容量的背包&#xff0c;最小用几个物品会不会出现拼凑不出来的情况&#xff1f;不会&#xff0c;因为有数字1&#xff0c;对任意正整数百分百能拼凑出来因此此题目与上一道题就变得一模一样了…...

ts 基础核心

吴悠讲编程 : 20分钟学会TypeScript 无废话速成TS https://www.bilibili.com/video/BV1gX4y177Kf...

在RHEL 8.10上安装开源工业物联网解决方案Thingsboard 3.9

在RHEL/CentOS/Rocky/AlmaLinux/Oracle Linux 8单节点上安装 备注&#xff1a; 适用于单节点 是否支持欧拉&#xff1f;&#xff1f;&#xff1f; 前提条件 本指南描述了如何在RHEL/CentOS 7/8上安装ThingsBoard。硬件要求取决于所选的数据库和连接到系统的设备数量。要在单…...

linux通过deb包安装(命令模式)

通过下载deb包安装Chrome浏览器 - lyy19s Wikihttps://lyy1119.github.io/%E8%BD%AF%E4%BB%B6%E4%BD%BF%E7%94%A8/Linux/InstallChrome/...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

【靶场】XXE-Lab xxe漏洞

前言 学习xxe漏洞,搭了个XXE-Lab的靶场 一、搭建靶场 现在需要登录,不知道用户名密码,先随便试试抓包 二、判断是否存在xxe漏洞 1.首先登录抓包 看到xml数据解析,由此判断和xxe漏洞有关,但还不确定xxe漏洞是否存在。 2.尝试xxe 漏洞 判断是否存在xxe漏洞 A.send to …...

智能照明系统:具备认知能力的“光神经网络”

智能照明系统是物联网技术与传统照明深度融合的产物&#xff0c;其本质是通过感知环境、解析需求、自主决策的闭环控制&#xff0c;重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成&#xff0c;形成具备认知能力的“光神经网络…...

Nginx 事件驱动理解

在做埋点采集服务的过程中&#xff0c;主要依靠openresty加lua脚本来实现采集。高并发还是主要依靠nginx来实现。而其核心就是事件驱动/多路io复用&#xff08;epoll机制&#xff09;&#xff0c;不同的linux服务器都有对应的实现方式。 而epoll机制就是&#xff0c;应用启动的…...