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

Java—— 常见API介绍 第四期

时间的相关知识点

1.世界标准时间:
格林尼治时间/格林威治时间(Greenwich Mean Time)简称 GMT。
目前世界标准时间(UTC)已经替换为:原子钟

2.中国标准时间:
世界标准时间+8小时

中国计算机中的时间原点

1970年1月1日 08:00:00 

3.时间单位换算:

1秒 = 1000毫秒
1毫秒 = 1000微秒
1微秒 = 1000纳秒

JDK7前时间相关类

Date时间
SimpleDateFormat格式化时间
Calendar日历 

Date时间类

说明:

Date 类是一个JDK写好的Javabean类,用来描述时间,精确到毫秒。
利用空参构造创建的对象,默认表示系统当前时间。
利用有参构造创建的对象,表示指定的时间。 

构造方法:

方法名说明
public Date()创建Date对象,表示当前时间
public Date(long date)创建Date对象,表示指定时间

常见成员方法:

方法名说明
public void setTime (long time)设置/修改毫秒值
public long getTime ( )获取时间对象的毫秒值

代码演示:

public class Test1 {public static void main(String[] args) {//空参构造,表示当前时间Date d1 = new Date();System.out.println(d1);//Fri Apr 25 11:21:13 CST 2025//带参构造,参数为long类型的整数,代表毫秒值//结果表示计算机时间原点加参数传递的毫秒值//计算机时间原点为 1970年1月1日 08:00:00Date d2 = new Date(0L);System.out.println(d2);//Thu Jan 01 08:00:00 CST 1970Date d3 = new Date(1000L);System.out.println(d3);//Thu Jan 01 08:00:01 CST 1970//设置/修改毫秒值d2.setTime(2000L);System.out.println(d2);//Thu Jan 01 08:00:02 CST 1970//获取时间对象的毫秒值long time1 = d1.getTime();System.out.println(time1);//1745551858290long time2 = d2.getTime();System.out.println(time2);//2000long time3 = d3.getTime();System.out.println(time3);//1000}
}

练习:

需求:

需求1:打印时间原点开始一年之后的时间
需求2:定义任意两个Date对象,比较一下哪个时间在前,哪个时间在后

代码实现:

public class Test2 {public static void main(String[] args) {//需求1:打印时间原点开始一年之后的时间//需求2:定义任意两个Date对象,比较一下哪个时间在前,哪个时间在后//需求1//创建Date对象d,传递0毫秒,表示时间原点Date d = new Date(0L);System.out.println(d);//Thu Jan 01 08:00:00 CST 1970//获取时间原点d的时间毫秒值long time = d.getTime();//在此基础上增加一年time = time + 1000L * 60 * 60 * 24 * 365;//增加后再设置回d中d.setTime(time);System.out.println(d);//Fri Jan 01 08:00:00 CST 1971System.out.println("-----------------------");//需求2//创建两个Date对象,参数为随机正整数Random r = new Random();Date d1 = new Date(Math.abs(r.nextInt()));Date d2 = new Date(Math.abs(r.nextInt()));System.out.println(d1);//Wed Jan 21 14:34:30 CST 1970System.out.println(d2);//Sun Jan 25 23:14:25 CST 1970//获取时间对象的毫秒值long time1 = d1.getTime();long time2 = d2.getTime();//进行比较if (time1 > time2) {System.out.println("时间1在后面");} else if (time1 < time2) {System.out.println("时间2在后面");} else {System.out.println("两时间相同");}//时间2在后面}
}

SimpleDateFormat类

作用:

格式化:把时间变成我们喜欢的格式。例如:2023年10月1日,2023-10-1,2023/10/1
解析:把字符串表示的时间变成Date对象。 

格式化的时间形式的常用的模式对应关系:

y
M
d
H
m
s

举例: 

2023-11-11 13:27:06

yyyy-MM-dd HH:mm:ss

 其他不常用的模式对应关系:



构造方法:

方法名说明
public SimpleDateFormat ()

构造一个SimpleDateFormat,

使用默认格式

public SimpleDateFormat (String pattern)

构造一个SimpleDateFormat,

使用指定的格式 

常见成员方法:

方法名说明
public final string format (Date date)

格式化(日期对象 -字符串)

public Date parse (String source)解析(字符串 ->日期对象)

代码演示:

public class Test3 {public static void main(String[] args) throws ParseException {//创建时间原点对象Date d = new Date(0L);//空参构造,使用默认格式SimpleDateFormat sdf1 = new SimpleDateFormat();//进行格式化String str1 = sdf1.format(d);System.out.println(str1);//1970/1/1 上午8:00//带参构造,使用指定的格式SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//进行格式化String str2 = sdf2.format(d);System.out.println(str2);//1970-01-01 08:00:00//解析String str = "2020-10-10 10:10:10";//创建对象的格式要和字符串所对应的格式一模一样SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//进行解析Date date = sdf.parse(str);System.out.println(date);//Sat Oct 10 10:10:10 CST 2020}
}

练习:

需求:

按照指定格式展示
假设,你的出生年月日为:2000-11-11
请用字符串表示这个数据,并将其转换为:2000年11月11日

代码实现:

public class Test4 {public static void main(String[] args) throws ParseException {String str = "2000-11-11";//先将其解析为时间类型SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf1.parse(str);//再将其格式化SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");String result = sdf2.format(date);System.out.println(result);//2000年11月11日}
}

Calendar

说明:

Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日
细节: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)为某个字段增加/减少指定的值

注意事项:

1: Calendar是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象
底层原理:会根据系统的不同时区来获取不同的日历对象,默认表示当前时间。
把会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组当中

例如:
0索引:纪元
1索引:年    Calendar.YEAR

2索引:月    Calendar.MONTH

3索引:一年中的第几周
4索引:一个月中的第几周
5索引:一个月中的第几天(日期)    Calendar.DATE

.......
2:月份:范围0~11,如果获取出来的是0,那么实际上是1月。
星期:国外习惯,星期日是一周中的第一天
1(星期日),2(星期一),3(星期二),4(星期三),5(星期四),6(星期五),7(星期六)

代码演示:

public class Test5 {public static void main(String[] args) {//获取当前时间的日历对象Calendar c = Calendar.getInstance();System.out.println(c);//...YEAR=2025,MONTH=3....//获取日期对象Date d1 = c.getTime();System.out.println(d1);//Fri Apr 25 15:04:45 CST 2025//给日历设置日期对象,设置为时间原点Date d2 = new Date(0L);c.setTime(d2);System.out.println(c);//...YEAR=1970,MONTH=0....//拿到时间毫秒值,因为上面设置成了时间原点,所以结果为0long timeInMillis = c.getTimeInMillis();System.out.println(timeInMillis);//0//给日历设置时间毫秒值,设置一个月的毫秒值c.setTimeInMillis(1000L * 60 * 60 * 24 * 31);System.out.println(c);//...YEAR=1970,MONTH=1....//取日历中的某个字段信息//根据索引对应某个字段/*int year = c.get(1);int month = c.get(2);int date = c.get(5);System.out.println(year+"年"+(month+1)+"月"+date+"日");//1970年2月1日*/int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH);int date = c.get(Calendar.DATE);System.out.println(year + "年" + (month + 1) + "月" + date + "日");//1970年2月1日//修改日历的某个字段信息c.set(Calendar.YEAR, 2020);System.out.println(c.get(Calendar.YEAR));//2020//为某个字段增加/减少指定的值c.add(Calendar.YEAR, 1);System.out.println(c.get(Calendar.YEAR));//2021c.add(Calendar.YEAR, -3);System.out.println(c.get(Calendar.YEAR));//2018}
}








 

相关文章:

  • 【多目标进化算法】常见多目标进化算法一览
  • IP查询专业版:支持IPv4/IPv6自动识别并切换解析的API接口使用指南
  • C++ (STL,顺序容器,关联容器,容器适配器)
  • markdown自动标题序号,标题序号,目录处理
  • 软件设计模式与体系结构:基于Java实现管道-过滤器架构
  • RunnerGo API性能测试实战与高并发调优
  • SQL Server 2019 安装与配置详细教程
  • 区间和数量统计 之 前缀和+哈希表
  • Linux内核参数调优(TCP BBR算法实践)
  • 【计算机视觉】CV实践项目- 基于PaddleSeg的遥感建筑变化检测全解析:从U-Net 3+原理到工程实践
  • c++11新特性随笔
  • Flink部署与应用——部署方式介绍
  • 机器学习基础理论 - 判别模型 vs 生成模型
  • CNN卷积神经网络知识点回顾学习(一)
  • 安卓手机下载谷歌浏览器遇到兼容问题怎么办【三步解决】
  • Java File 类的常用方法详解
  • 数据结构手撕--【二叉树】
  • windows一键测速DNS并切换
  • 2023年第十四届蓝桥杯Scratch02月stema选拔赛真题——算式题
  • MySQL表的操作 -- 表的增删改查
  • 识味顺德︱顺德菜的醉系列与火滋味
  • 最高法知产庭年度报告:民事案件二审发回重审率持续下降
  • 科克托是说真话的骗子,而毕加索是一言不发、让大家去猜的人
  • 拉卡拉一季度净利约1亿降超五成,去年净利3.5亿降逾23%
  • 政治局会议:创设新的结构性货币政策工具,设立新型政策性金融工具,支持科技创新、扩大消费、稳定外贸等
  • 从息屏24小时到息屏1小时,姚明在深圳开启落地试点