Java常用API_时间

一,JDK7时间:

1.Date:

        我先通过一段代码简单展示一下它的几个方法及功能

代码:

        这里要注意的是

        时间原点:1970年1月1日 00:00:00

        中国的时间原点:由于中国处在东八区,时间原点要晚上8小时,即为1970年1月1日08:00:00

        下方代码第二点,创建一个对象表示一个指定的时间中:

              1.括号中的参数为long类型单位为毫秒,所以在0后面加了一个大写的L,提高代码可读性

              2.填写的参数为0,即表示把从时间原点开始过0毫秒后的时间赋值给这个对象中

        下方代码第三点,setTime修改时间中:

              1.括号中的参数类型也为long,且单位为毫秒,所以数字后面使用L修饰

              2.填写1000表示把从时间原点开始过1000毫秒后的时间赋值给这个对象

public class Demo1 {public static void main(String[] args) {//1.创建对象表示一个时间(当前时间)Date d1 = new Date();System.out.println(d1);//2.创建对象表示一个指定的时间Date d2 = new Date(0L);System.out.println(d2);//3.setTime修改时间d2.setTime(1000L);System.out.println(d2);//4.getTime获取当前时间距离时间原点的毫秒值long time = d2.getTime();System.out.println(time);}
}
运行结果:

小练习:

题目:需求1:打印时间原点开始一年之后的时间

           需求2:定义两个Date对象,比较一下哪个在前哪个在后

代码:
public class Test1 {public static void main(String[] args) {//需求1:打印时间原点开始一年之后的时间//创建对象表示时间原点Date d1 = new Date(0L);//获取时间原点毫秒值long time = d1.getTime();//在这个毫秒值基础上加一年(单位毫秒)time = time + 1000L * 60 * 60 * 24 * 365;//注:不加L会导致运算出错,因为后面这些数字会超出int的范围//将这个毫秒值返回最初的时间原点对象d1.setTime(time);System.out.println("需求1结果:");System.out.println(d1);//需求2:定义任意两个Date对象,比较一下哪个时间在前,哪个时间在后Random r = new Random();//创建两个Date对象,通过循环随机获取时间原点后任意毫秒的时间,并使用Math.abs()来取绝对值保证为正数Date d2 = new Date(Math.abs(r.nextLong()));Date d3 = new Date(Math.abs(r.nextLong()));//获取两个对象距离时间原点的毫秒值long time1 = d2.getTime();long time2 = d3.getTime();//比较并输出结果System.out.println("需求2结果:");System.out.println("第一个时间为:" + d2);System.out.println("第二个时间为:" + d3);if(time1 > time2) {System.out.println("第一个时间在后面,第二个时间在前面");} else if (time1 < time2) {System.out.println("第一个时间在前面,第二个时间在后面");} else {System.out.println("两个时间一样");}}
}
运行结果:

2.SimpleDateFormat方法:

构造方法与成员方法(格式化与解析):

        格式化为将日记对象转换成字符串,解析为将字符串转换成日记对象

代码:
public class Demo2 {public static void main(String[] args) throws ParseException {//格式化System.out.println("------------------格式化------------------");//1.利用空参构造创建SimpleDateFormat对象,默认格式SimpleDateFormat sdf1 = new SimpleDateFormat();Date d1 = new Date(0L);String format1 = sdf1.format(d1);System.out.println(format1);System.out.println("-----------------");//2.利用带参构造创建SimpleDateFormat对象,指定格式SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String format2 = sdf2.format(d1);System.out.println(format2);//解析System.out.println("------------------解析------------------");//定义一个字符串表示时间String str = "2000-01-01 01:01:01";SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf3.parse(str);System.out.println(date);//转换之后就可以再使用Date的方法获取距离时间原点的时间了long time = date.getTime();System.out.println(time);}
}

代码中y M d H m s,分别表示年 月 日 小时 分钟 秒,一个字母代表一位,它们是方法中定义好的

方法中定义了以下模式字母:

运行结果:

练习一:

        假设,出生年月日为:2003-09-01

        请用字符串表示这个数据,并将其转换为:2003年9月1日

代码:
public class Test2 {public static void main(String[] args) throws ParseException {String birth = "2003-09-01";SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");Date d1= sdf1.parse(birth);SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");String result = sdf2.format(d1);System.out.println(result);}
}
运行结果:

练习二:

        有一个秒杀活动,开始时间为:2024年11月11日 0:0:0

                                     结束时间为:2024年11月11日 0:10:0

        person1下单时间为:2024年11月11日 0:01:00

        person2下单时间为:2024年11月11日 0:11:00

用代码说明ta们有没有参加成功:

代码:
public class Test3 {public static void main(String[] args) throws ParseException {//定义字符串存储开始结束时间和小黑小白的下单时间String startStr = "2024年11月11日 0:0:0";String endStr = "2024年11月11日 0:10:0";String person1OrderStr = "2024年11月11日 0:01:0";String person2OrderStr = "2024年11月11日 0:11:0";//创建SimpleDateFormatSimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//将字符串解析成Date类Date startDate = sdf.parse(startStr);Date endDate = sdf.parse(endStr);Date person1OrderDate = sdf.parse(person1OrderStr);Date person2OrderDate = sdf.parse(person2OrderStr);//利用Date类方法求出距离时间原点的毫秒值Long startTime = startDate.getTime();Long endTime = endDate.getTime();Long person1OrderTime = person1OrderDate.getTime();Long person2OrderTime = person2OrderDate.getTime();//进行比较if(person1OrderTime >= startTime && person1OrderTime <= endTime) {System.out.println("person1秒杀成功");} else {System.out.println("person1秒杀失败");}if(person2OrderTime >= startTime && person2OrderTime <= endTime) {System.out.println("person2秒杀成功");} else {System.out.println("person2秒杀失败");}}
}
运行结果:

3.Calendar:

        这个类表示一个时间的日历对象

常用方法:

public static Calendar getInstance()        获取当前时间的日历对象public final Date getTime()                 获取日期对象
public final setTime(Date date)             给日历设置日期对象public long getTimeInMillis()               拿到时间毫秒值
public void setTimeInMillis(long millis)    给日历设置时间毫秒值public int get(int field)                   取日期中的某个字段信息
public void set(int field,int value)        修改日历的某个字段信息
public void add(int field,int amount)       为某个字段增加/减少指定的值
代码演示:
public class Test4 {public static void main(String[] args) throws ParseException {/*public static Calendar getInstance()        获取当前时间的日历对象public final Date getTime()                 获取日期对象public final setTime(Date date)             给日历设置日期对象public long getTimeInMillis()               拿到时间毫秒值public void setTimeInMillis(long millis)    给日历设置时间毫秒值public int get(int field)                   取日期中的某个字段信息public void set(int field,int value)        修改日历的某个字段信息public void add(int field,int amount)       为某个字段增加/减少指定的值*///创建日历对象Calendar c = Calendar.getInstance();System.out.println(c);//获取日期对象Date d1 = c.getTime();//给日历设置日期对象String timeStr = "2024-4-6";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date d2 = sdf.parse(timeStr);c.setTime(d2);System.out.println(c);//拿到时间毫秒值long timeInMillis1 = c.getTimeInMillis();System.out.println(timeInMillis1);//给日历设置时间毫秒值c.setTimeInMillis(10000);timeInMillis1 = c.getTimeInMillis();System.out.println(timeInMillis1);//取日期中的某个字段信息//给日历对象c存储上日期2024-4-6c.setTime(d2);System.out.println(c);int year = c.get(Calendar.YEAR);//注意:月份字段范围为0~11,实际上的月份为当前的值+1,比如0表示1月,3表示4月,所以月份+1int month = c.get(Calendar.MONTH) + 1;int date = c.get(Calendar.DAY_OF_MONTH);//注意:外国认为星期日是第一天,星期一是第二天,星期二第三天,以此类推,所以创建一个方法来让输出结果符合中国人的阅读习惯int week = c.get(Calendar.DAY_OF_WEEK);System.out.println(year + ", " + month + ", " + date + ", " + getWeek(week));}public static String getWeek(int index) {String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};return arr[index];}
}
运行结果:

这是日历中年月日所在字段

二,JDK8时间:

1.Date类方法:

(1)zoneId时区:
代码演示:
public class Demo1 {public static void main(String[] args) {//获取所有的时区名称  一共有600个Set<String> zoneIds = ZoneId.getAvailableZoneIds();System.out.println(zoneIds);//获取当前系统的默认时区ZoneId zoneId = ZoneId.systemDefault();System.out.println(zoneId);//获取指定的时区ZoneId zoneId1 = ZoneId.of("Asia/Taipei");System.out.println(zoneId1);}
}
运行结果:

(2)Instant时间戳:
代码演示:
public class Demo2 {public static void main(String[] args) {//1.获取当前时间的Instant对象(标准时间)System.out.println("----------1----------");Instant now = Instant.now();System.out.println(now);//2.根据(秒/毫秒/纳秒)获取Instant对象System.out.println("----------2----------");Instant instant1 = Instant.ofEpochMilli(1000L);//单位为毫秒System.out.println(instant1);Instant instant2 = Instant.ofEpochSecond(1L);//单位为秒System.out.println(instant2);Instant instant3 = Instant.ofEpochSecond(0L,1000000000);//参数为秒和纳秒System.out.println(instant3);//3.指定时区System.out.println("----------3----------");ZonedDateTime zonedDateTime = now.atZone(ZoneId.of("Asia/Shanghai"));System.out.println(zonedDateTime);//4.isXxx 判断  isBefore isAfterSystem.out.println("----------4----------");Instant instant4 = Instant.ofEpochMilli(0L);Instant instant5 = Instant.ofEpochMilli(1000L);boolean result1 = instant4.isAfter(instant5);System.out.println(result1);boolean result2 = instant4.isBefore(instant5);System.out.println(result2);//5.minusXxx  减少时间系列的方法System.out.println("----------5----------");Instant instant6 = Instant.ofEpochMilli(1000L);System.out.println(instant6);Instant instant7 = instant6.minusMillis(1000L);System.out.println(instant7);//6.plusXxx   增加时间系列的方法System.out.println("----------6----------");Instant instant8 = Instant.ofEpochMilli(1000L);System.out.println(instant8);Instant instant9 = instant8.plusMillis(1000L);System.out.println(instant9);}
}
运行结果:

(3)ZoneDateTime:
代码演示:
public class Demo3 {public static void main(String[] args) {//1.获取当前时间对象(带时区)System.out.println("----------1----------");ZonedDateTime now = ZonedDateTime.now();System.out.println(now);//2.获取指定的时间对象(带时区)//年月日时分秒纳秒方式指定System.out.println("----------2----------");ZonedDateTime time1 = ZonedDateTime.of(2024,4,7,12,0,0,0, ZoneId.of("Asia/Shanghai"));System.out.println(time1);//通过Instant + 时区的方式指定获取事件对象Instant instant = Instant.ofEpochMilli(0L);ZoneId zoneId = ZoneId.of("Asia/Shanghai");ZonedDateTime time2 = ZonedDateTime.ofInstant(instant,zoneId);System.out.println(time2);//3.withXxx 修改时间系列的方法System.out.println("----------3----------");ZonedDateTime time3 = time2.withYear(2000);System.out.println(time3);//4.minusXxx 减少时间系列的方法System.out.println("----------4----------");ZonedDateTime time4 = time3.minusDays(365);System.out.println(time4);//5.plusXxx 增加时间系列的方法System.out.println("----------5----------");ZonedDateTime time5 = time3.plusMinutes(60);System.out.println(time5);}
}
运行结果:

2.日期格式化类(SimpleDateFormat):

DateTimeFormater:
代码演示:
public class Demo4 {public static void main(String[] args) {//创建事件对象ZonedDateTime now = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));//创建解析/格式化器DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");//格式化System.out.println(dtf1.format(now));}
}
运行结果:

3.日历类(Calendar):

LocalDateTime(包含LocalDate和LocalTime):
代码演示:
public class Demo5 {public static void main(String[] args) {//获取本地时间的日历对象LocalDateTime ldt1 = LocalDateTime.now();System.out.println(ldt1);int year = ldt1.getYear();int month = ldt1.getMonthValue();int date = ldt1.getDayOfMonth();int hour = ldt1.getHour();int minute = ldt1.getMinute();int second = ldt1.getSecond();System.out.println(year + ", " + month + ", " +  date + ", " + hour + ", " + minute + ", " + second);//isXxx 判断LocalDateTime ldt2 = LocalDateTime.of(2000,12,12,0,0);boolean result1 = ldt1.isAfter(ldt2);boolean result2 = ldt1.isBefore(ldt2);System.out.println(result1);System.out.println(result2);//withXxx 修改LocalDateTime ldt3 = ldt2.withYear(2024);System.out.println(ldt3);//minusXxx 减少LocalDateTime ldt4 = ldt2.minusYears(1000);System.out.println(ldt4);//plusXxx 增加LocalDateTime ldt5 = ldt2.plusYears(1000);System.out.println(ldt5);//还可以将LocalDateTime类转换成LocalDate类和LocalTime类//前者只有年月日,后者只有时分秒,方法和本类一致,可套用//转换方法:LocalDate localDate = ldt5.toLocalDate();System.out.println(localDate);LocalTime localTime = ldt5.toLocalTime();System.out.println(localTime);}
}
运行结果:

4.工具类:

ChronoUnit:
代码演示:
public class Demo6 {public static void main(String[] args) {//创建当前时间的日历对象LocalDateTime today = LocalDateTime.now();System.out.println(today);//创建某一天的日历对象LocalDateTime someday = LocalDateTime.of(2000,1,1,1,11);System.out.println(someday);System.out.println("相差的年数:" + ChronoUnit.YEARS.between(someday,today));System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(someday,today));System.out.println("相差的天数:" + ChronoUnit.DAYS.between(someday,today));System.out.println("相差的时数:" + ChronoUnit.HOURS.between(someday,today));System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(someday,today));System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(someday,today));}
}
运行结果:

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

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

相关文章

MySQL 主从 AUTO_INCREMENT 不一致问题分析

本文介绍了 MySQL5.7 中常见的replace into 操作造成的主从auto_increment不一致现象&#xff0c;一旦触发了主从切换&#xff0c;业务的正常插入操作会触发主键冲突的报错提示。 一、问题描述 1.1 问题现象 在 MySQL 5.7 版本中&#xff0c;REPLACE INTO 操作在表存在自增主键…

nssm 工具把asp.net core mvc变成 windows服务,使用nginx反向代理访问

nssm工具的作用&#xff1a;把项目部署成Windows服务&#xff0c;可以在系统后台运行 1.创建一个asp.net core mvc的项目weblication1 asp.net core mvc项目要成为windows服务需要安装下面的nuget包 <ItemGroup><PackageReference Include"Microsoft.Extension…

2_7.Linux中的无人值守安装脚本kickstart

## 一.kickstart自动安装脚本的作用 ## #在企业中安装多台操作系统时面临的问题# 当安装Linux操作系统时&#xff0c;安装过程会需要回答很多关于设定的问题 这些问题必须手动选择&#xff0c;否则无法进行安装 当只安装1台Linux系统&#xff0c;手动选择设定工作量比较轻松 当…

『VUE』14. Style绑定(详细图文注释)

目录 行内css动态样式对象引入数组引入代码演示总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 大体上和前面的class绑定是一致的,只是class换成了style. 请注意,实际开发中,我们一般建议用class,因为style的权重太高了,用sty…

边缘计算采集网关如何助力制造企业解决数采问题-天拓四方

一、企业背景 某大型制造企业&#xff0c;位于国内某经济发达的工业园区内&#xff0c;拥有多个生产线和智能化设备&#xff0c;致力于提高生产效率、降低运营成本。随着企业规模的扩大和生产自动化的推进&#xff0c;该企业面临着海量数据处理、实时响应和网络安全等多重挑战…

ElementUI使用问题记录:设置路由+iconfont图标+自定义表单验证

一、关于导航怎么设置路由 1、在el-menu这个标签的属性中添加 router ,官方文档的解释是&#xff1a;启用vue-router 这种模式 2、在el-menu-item标签中的index属性直接书写路由&#xff0c;就可以实现正常vue-router了 3、在el-menu-item标签中书写路由属性&#xff1a;:route…

【C++进阶】哈希的应用之位图和布隆过滤器

位图和布隆过滤器 一&#xff0c;位图1. 实现2. 位图的应用 二&#xff0c;布隆过滤器1. 使用场景2. 模拟实现 三&#xff0c;海量数据面试题哈希切分 四&#xff0c;总结 这一节我们来看哈希的应用 一&#xff0c;位图 先来看一个面试题 这里如果用unordered_set来解决&…

C++11可变模板参数:海纳百川的Args

目录 一、可变模板参数的概念及功能 1.1Args的概念与使用 1.2获取args中的参数 二、emplace可变模板参数的实际应用 三、逗号表达式展开参数包 一、可变模板参数的概念及功能 1.1Args的概念与使用 C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板…

二维码门楼牌管理应用平台建设:物业缴费的数字化革新

文章目录 前言一、物业缴费的数字化革新二、在线缴费功能的实现三、智能化缴费管理的优势四、面临的挑战与未来展望五、结语 前言 随着科技的不断进步&#xff0c;二维码门楼牌管理应用平台已成为物业管理的新趋势。在这样一个平台上&#xff0c;物业缴费的数字化革新不仅提高…

【计算机网络】TCP协议可靠传输保证(序列号/确认应答机制、超时重传、最长消息长度、滑动窗口控制、拥塞控制)

TCP协议可靠传输 1.序列号确认应答机制2.超时重传3.最长消息长度4.滑动窗口控制5.拥塞控制 1.序列号确认应答机制 这个机制类似于问答的形式。比如在课堂上老师会问你“明白了吗&#xff1f;”&#xff0c;假如你没有隔一段时间没有回应或者你说不明白&#xff0c;那么老师就会…

橘子学JDK之JMH-03(@State)

这里我们来搞官方的第三个案例&#xff0c;引入新的注解State。 一、案例三代码 package com.levi;/*** Description:* Author: Levi* Date: 2024/4/8 18:44*/import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.R…

【YOLOV8】项目目录重点部分介绍和性能评估指标

目录 一 项目目录重点部分介绍 二 性能评估指标 一 项目目录重点部分介绍 1 ultralytics

windows环境变量滥用维权/提权

0x01 前提 通过滥用系统的路径搜索机制来欺骗高权限用户执行看似合法的系统二进制文件&#xff0c;实际上是恶意的代码或程序&#xff0c;从而导致升权限并执行恶意操作。 攻击的关键前提&#xff1a; 路径搜索顺序&#xff1a; 当用户在命令行或程序中执行一个命令时&#x…

kafka 高吞吐设计分析

说明 本文基于 kafka 2.7 编写。author blog.jellyfishmix.com / JellyfishMIX - githubLICENSE GPL-2.0 概括 支撑 kafka 高吞吐的设计主要有以下几个方面: 网络 nio 主从 reactor 设计模式 顺序写。 零拷贝。 producer producer 开启压缩后是批量压缩&#xff0c;bro…

【Qt】:常用控件(七:输入类控件)

常用控件 一.Combo Box&#xff08;下拉框&#xff09;二.Spin Box&#xff08;微调框&#xff09;三.ate Edit&Time Edit&#xff08;日期微调框&#xff09;四.Dial&#xff08;旋钮&#xff09;五.Slider&#xff08;滑动条&#xff09; 一.Combo Box&#xff08;下拉框…

738.单调递增的数字

// 定义一个名为Solution的类 class Solution { public:// 定义公共成员函数&#xff1a;计算并返回大于等于输入整数N且其各位数字非降序排列的最小整数int monotoneIncreasingDigits(int N) {// 将整数N转换成字符串形式&#xff0c;方便操作每一位数字string strNum to_str…

23linux 自定义shell文件系统

打印环境变量&#xff0c;把当前子进程所有环境变量打印出来 环境变量也是一张表&#xff08;指针数组以null结尾&#xff0c;最后条件不满足就退出了 &#xff09; 用子进程调用 结论1 当我们进行程序替换的时候 &#xff0c;子进程对应的环境变量&#xff08;子进程的环境变…

Mybatis执行器(Executor)

Executor简介 Executor Executor是MyBatis的核心接口之一&#xff0c;其中定义了数据库操作的基本方法。在实际应用中经常涉及的SqlSession接口的功能&#xff0c;都是基于Executor接口实现的。 BaseExecutor BaseExecutor是一个实现了Executor接口的抽象类,它实现了Execut…

Yolov8-pose关键点检测:特征融合 | CAMixing:卷积-注意融合模块和多尺度提取能力 | 2024年4月最新成果

💡💡💡本文独家改进:CAMixingBlock更好的提取全局上下文信息和局部特征,包括两个部分:卷积-注意融合模块和多尺度前馈网络; 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect前面,增强detect提取能力; 提供多种改进方…