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 操作在表存在自增主键…

状态机编程的常用框架和方法

状态机编程是一种管理复杂系统行为的有效方法&#xff0c;它通过定义一系列状态、事件、转换和动作来描述系统的行为。在嵌入式系统开发中&#xff0c;状态机编程尤为重要&#xff0c;因为它可以帮助开发者以结构化的方式处理系统中的并发和异步事件。以下是一些常用的状态机编…

大话设计模式——六大基本设计原则(SOLID原则)

设计模式 定义&#xff1a;软件开发中&#xff0c;在特定上下文中解决一类常见问题的被证明为有效的最佳实践。可供其他开发者重复使用解决相似问题。 好处&#xff1a; 提高代码的可重用性&#xff0c;减少重复代码。提高代码的可维护性&#xff0c;使代码更易于理解和修改。…

django怎么设置把logger.info的日志保存到本地文件

在Django项目中,要将logger.info()产生的日志信息保存到本地文件,需要对Django的logging配置进行设置。以下是一个详细的步骤说明和示例代码:步骤一:配置settings.py在Django项目的settings.py文件中,添加或更新LOGGING配置字典。这是一个标准的Python字典,遵循logging模…

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…

Gradle系列(五)-常用的gradle命令

Gradle系列(五)-常用的gradle命令 本文主要记录下gradle下常用的命令 1: gradle -v gradle -v 命令可以获取Gradle的版本信息。 2: gradle dependencies gradle dependencies命令用于显示项目的依赖关系。它会列出项目中所有的依赖项&#xff0c;包括直接依赖和传递依赖. …

【LeetCode热题100】35. 搜索插入位置(二分)

一.题目要求 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 二.题目难度 简单 三.输入样例 示例 1: 输入: nums…

PgSQL的with as语法

returning 返回的这一些字段&#xff0c;然后进行汇总为remove_alarms 然后select一下remove_alarms 出来的数据然后保存到tb_alarm_his 里面 with remove_alarms as( delete fromtb_alarm whereid in (508) returning 0,now(),admin,alarmadvice,alarmadvicecn,alarmarises…

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

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

006 spring aop(初识)

文章目录 pom.xmlLogAspect.javaStudentServiceImpl.javaStudentService.javaapplicationContext.xmlStudentServiceImplTest.java pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…

Java内部类(一)

常用类&#xff08;一&#xff09; 内部类 成员内部类&#xff1a;一个类定义在另一个类中静态内部类&#xff1a;static局部内部类&#xff1a;一个方法内定义一个类匿名内部类&#xff1a;没有名字的内部类 内部类如下 class Outer{class Inner{} }特点&#xff1a; 编译…

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

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

day13 java final 类和对象的初始化执行顺序

final [面试题]请简述final关键字final修饰类&#xff08;最终的类&#xff09;-太监类&#xff1a;该类不能被继承。(比如&#xff1a;String StringBuilder,....) final修饰方法&#xff08;最终的方法&#xff09;&#xff1a;不能被重写 final修饰的变量 &#xff1a;值不…

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

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

C++(10): std::map、std::multimap与std::unordered_map

1. 简述 std::map、std::multimap 和 std::unordered_map 是 C 标准模板库&#xff08;STL&#xff09;中的三种关联容器&#xff0c;它们提供了存储键值对&#xff08;pair&#xff09;的方式&#xff0c;并允许通过键来快速检索值。这三者之间的主要区别在于它们的内部数据结…

JAVA实现网络爬虫

在Java中实现网络爬虫&#xff0c;可以使用Java内置的java.net.URL和java.net.URLConnection类来发送HTTP请求&#xff0c;也可以使用更高级的库&#xff0c;如Apache的HttpClient和Jsoup&#xff0c;后者可以方便地解析HTML文档。 以下是一个使用HttpClient和Jsoup的Java网络…

day14 java接口

接口 接口&#xff1a;对不同类型不同事物相同功能的描述&#xff08;一定程序上解决了单继承的局限性&#xff09;接口可以理解成一种标准 规范当类实现这个接口就实现了这个标准或规范接口的格式&#xff1a;权限修饰符 interface 接口名{}权限修饰符只能是public和缺省的。…

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++学习笔记三--基本控制语句

目录 前言 一、C语句 二、顺序结构 1.声明语句 2.表达式语句 3.基本输入/输出语句 4.复合语句和空语句 三、选择结构 1.if语句 2.switch语句 四、循环结构 1.for语句 2.while语句 3.do...while语句 4.循环的嵌套 五、跳转语句 前言 这篇文章介绍一…