《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);}}

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

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

相关文章

IO进程寒假作业DAY6

请使用互斥锁 和 信号量分别实现5个线程之间的同步 使用互斥锁 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include &…

mybatis(112/134)

多对一 第一种方法&#xff1a; 一的表参数设置&#xff1a; <association property"clazz" javaType"Clazz"> <id property"cid" column"cid"/> <result property"cname" column"cname"/> <…

读书笔记:《华为突围ERP封锁全纪实》

文章背景&#xff1a; 2019年5月&#xff0c;华为被美国制裁&#xff0c;其ERP系统面临断供风险。ERP系统是企业核心管理软件&#xff0c;一旦中断&#xff0c;华为的全球业务将陷入瘫痪。面对这一生死存亡的危机&#xff0c;华为启动了“突围”计划&#xff0c;历经数年艰苦奋…

【C++】设计模式详解:单例模式

文章目录 Ⅰ. 设计一个类&#xff0c;不允许被拷贝Ⅱ. 请设计一个类&#xff0c;只能在堆上创建对象Ⅲ. 请设计一个类&#xff0c;只能在栈上创建对象Ⅳ. 请设计一个类&#xff0c;不能被继承Ⅴ. 请设计一个类&#xff0c;只能创建一个对象&#xff08;单例模式&#xff09;&am…

K8s运维管理平台 - KubeSphere 3.x 和4.x 使用分析:功能较强,UI美观

目录标题 Lic使用感受优点&#xff1a;优化点&#xff1a; 实操首页项目 | 应用负载 | 配置 | 定制资源定义存储监控告警集群设置 **KubeSphere 3.x** 和 **4.x**1. **架构变化**&#xff1a;2. **多集群管理**&#xff1a;3. **增强的 DevOps 功能**&#xff1a;4. **监控与日…

SpringBoot或SpringAI对接DeekSeek大模型

今日除夕夜&#xff0c;deepseek可是出尽了风头&#xff0c;但是我看网上还没有这方面的内容对接&#xff0c;官网也并没有&#xff0c;故而本次对接是为了完成这个空缺 我看很多的博客内容是流式请求虽然返回时正常的&#xff0c;但是他并不是实时返回&#xff0c;而是全部响应…

低代码系统-产品架构案例介绍、明道云(十一)

明道云HAP-超级应用平台(Hyper Application Platform)&#xff0c;其实就是企业级应用平台&#xff0c;跟微搭类似。 通过自设计底层架构&#xff0c;兼容各种平台&#xff0c;使用低代码做到应用搭建、应用运维。 企业级应用平台最大的特点就是隐藏在冰山下的功能很深&#xf…

文献阅读 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…

判断子序列

hello 大家好&#xff01;今天开写一个新章节&#xff0c;每一天一道算法题。让我们一起来学习算法思维吧&#xff01; function isSubsequence(s, t) {// 初始化两个指针&#xff0c;分别指向字符串 s 和 t 的起始位置let i 0; let j 0; // 当两个指针都未超出对应字符串的长…

您与此网站之间建立的连接不安全

网站建立好后&#xff0c;用360浏览器打开后地址栏有一个灰色小锁打着红色叉点击后显示“您与此网站之间建立的连接不安全”“请勿在此网站上输入任何敏感信息&#xff08;例如密码或信用卡信息&#xff09;&#xff0c;因为攻击者可能会盗取这些信息。” 出现这个提示的主要原…

解读隐私保护工具 Fluidkey:如何畅游链上世界而不暴露地址?

作者&#xff1a;Techub 独家解读 撰文&#xff1a;Tia&#xff0c;Techub News 隐私不只是个人权利的象征&#xff0c;更是我们迈向透明、信任未来的重要过渡桥梁。如果你还未意识到隐私的重要性&#xff0c;推荐阅读 KeyMapDAO 的文章《「被出卖的自由」&#xff1a;我到底该…

uniapp 地图添加,删除,编辑标记,在地图中根据屏幕范围中呈现标记

前言 小程序实现新功能&#xff0c;在地图中选取位置添加标记&#xff0c;并在地图中呈现添加的标记&#xff0c;&#xff08;呈现的是根据当前屏幕范围内的标记&#xff09;&#xff0c;并对标记进行分享&#xff0c;删除&#xff0c;编辑&#xff0c;导航&#xff0c;并从分…

DPO、KTO、DiffusionDPO

DPO&#xff08;Direct Preference Optimization&#xff09; 原文来自于 https://arxiv.org/pdf/2305.18290&#xff0c; Bradley-Terry (BT)模型&#xff0c;假设人的喜欢遵循下面的公式&#xff0c;给定x&#xff0c;得到 y 1 y_1 y1​和 y 2 y_2 y2​分别遵循以下关系&am…

Android Studio安装配置

一、注意事项 想做安卓app和开发板通信&#xff0c;踩了大坑&#xff0c;Android 开发不是下载了就能直接开发的&#xff0c;对于新手需要注意的如下&#xff1a; 1、Android Studio版本&#xff0c;根据自己的Android Studio版本对应决定了你所兼容的AGP&#xff08;Android…

GPU上没程序在跑但是显存被占用

原因&#xff1a;存在僵尸线程&#xff0c;运行完但是没有释放内存 查看僵尸线程 fuser -v /dev/nvidia*关闭僵尸线程 pkill -9 -u 用户名 程序名 举例&#xff1a;pkill -9 -u grs python参考&#xff1a;https://blog.csdn.net/qq_40206371/article/details/143798866

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

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

DeepSeek LLM解读

背景&#xff1a; 量化巨头幻方探索AGI&#xff08;通用人工智能&#xff09;新组织“深度求索”在成立半年后&#xff0c;发布的第一代大模型DeepSeek试用地址&#xff1a;DeepSeek &#xff0c;免费商用&#xff0c;完全开源。作为一家隐形的AI巨头&#xff0c;幻方拥有1万枚…

用WinForm如何制作简易计算器

首先我们要自己搭好页面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace _7_简易计算…

Luzmo 专为SaaS公司设计的嵌入式数据分析平台

Luzmo 是一款嵌入式数据分析平台&#xff0c;专为 SaaS 公司设计&#xff0c;旨在通过直观的可视化和快速开发流程简化数据驱动决策。以下是关于 Luzmo 的详细介绍&#xff1a; 1. 背景与定位 Luzmo 前身为 Cumul.io &#xff0c;专注于为 SaaS 公司提供嵌入式分析解决方案。…

Openfga 授权模型搭建

1.根据项目去启动 配置一个 openfga 服务器 先创建一个 config.yaml文件 cd /opt/openFGA/conf touch ./config.yaml 怎么配置&#xff1f; 根据官网来看 openfga/.config-schema.json at main openfga/openfga GitHub 这里讲述详细的每一个配置每一个类型 这些配置有…