Java时间类

news2025/1/14 1:14:30

时间在Java中是两个类 Date 和 Calendar

Date类

Date是在Java.util包中的也就是工具包。
测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lj4ZDtzX-1673011032747)(../images/Pasted%20image%2020230106201228.png)]

输出的是当前的系统时间

修改idea中的注释的颜色:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7eUzVx28-1673011032748)(../images/Pasted%20image%2020230106201346.png)]

是date不是data


package org.data;  
  
import java.util.Date;  
  
public class Test {  
    public static void main(String[] args) {  
        Date d = new Date();//系统时间  
        System.out.println(d);  
        System.out.println(d.getYear()); //从1900年开始算的  
        System.out.println(d.getMonth()); //月份从0 开始  
        System.out.println(d.getDate()); //日期  
        System.out.println(d.getHours()); //小时  
        System.out.println(d.getMinutes());//分钟  
        System.out.println(d.getSeconds());//秒  
  
        System.out.println(d.getTime()); //得到的是一个时间戳  
  
    }  
}

最后那个时间戳就可以用来计算时间差什么的

这里可以看出Date的不方便就是从年份来看的,不方便。

calendar类

下面来看看calendar类

public abstract class Calendar
extends 
implements [Serializable]

官网说了,这东西是个抽象类,抽象类不能实例化。
官方原话:

Calendar 类是一个抽象类,它提供了在特定的时间瞬间和一组日历字段(如 YEAR、 MONTH、 DAY _ OF _ MONTH、 HOUR 等)之间进行转换的方法,还提供了操作日历字段(如获取下周的日期)的方法。时间上的瞬间可以用一个毫秒值来表示,这个值与1970年1月1日格林威治时间00.00.00.000(格里高利时间)的纪元相比是一个偏移量。

接着官方就告诉你如何在不实例化类的情况下使用这个类:

该类还提供了用于在包外实现具体日历系统的其他字段和方法。这些字段和方法被定义为 protected。

与其他区域设置敏感的类一样,Calendar 提供了一个类方法 getInstance,用于获取这种类型的通用对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,该对象的日历字段已用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();

看看输出的东西:

java.util.GregorianCalendar[time=1673008486382,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=6,DAY_OF_YEAR=6,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=34,SECOND=46,MILLISECOND=382,ZONE_OFFSET=28800000,DST_OFFSET=0]

其实可以发现,这其中包含了年月日时分秒的很多信息。

package org.data;  
  
import java.util.Calendar;  
import java.util.Date;  
  
public class testcalendar {  
    public static void main(String[] args) {  
        Calendar instance = Calendar.getInstance();  
        System.out.println(instance);  
  
        System.out.println(instance.get(Calendar.YEAR));  
        System.out.println(instance.get(Calendar.MONTH) + 1);  
        System.out.println(instance.get(Calendar.DATE));  
        System.out.println(instance.get(Calendar.HOUR_OF_DAY));  
        System.out.println(instance.get(Calendar.MINUTE));  
        System.out.println(instance.get(Calendar.SECOND));  
  
        System.out.println("---------------------------------------");  
        instance.set(Calendar.DATE,instance.get(Calendar.DATE)+30);//将时间往前30天  
        System.out.println(instance.get(Calendar.YEAR));  
        System.out.println(instance.get(Calendar.MONTH) + 1);  
        System.out.println(instance.get(Calendar.DATE));  
        System.out.println(instance.get(Calendar.HOUR_OF_DAY));  
        System.out.println(instance.get(Calendar.MINUTE));  
        System.out.println(instance.get(Calendar.SECOND));  
//        我虽然是直接加了30天,但是如果月份进位了,他会自动进位。就很方便。  
  
//        Calendar中获取完整的时间  
        Date d = instance.getTime();  
  
        System.out.println(d);  
//      date转换成calendar  
        Date date = new Date();  
        Calendar cal = Calendar.getInstance();  
        cal.setTime(date);  
  
    }  
}

可以自己code试试。这里对于日期的加或者减都是可以的。

格式化时间:

SimpleDateFormat:格式化时间的工具类。
在java.text包中
字符串转换成时间:format(Date)

package org.data;  
  
import com.sun.xml.internal.ws.util.xml.CDATA;  
  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
public class testTime {  
//    格式化时间:  
public static void main(String[] args) {  
    Date date = new Date();  
//  默认的时间效果:  
    System.out.println(date );  
  
//    格式化之后:  
//    设置格式化的类型  
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:sss");  
//    格式化日期  
    String dates = simpleDateFormat.format(date);  
    System.out.println(dates);  
  
  
}  
}

时间转换成字符串:

package org.data;  
  
import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.Scanner;  
  
public class testTime2 {  
    public static void main(String[] args) throws ParseException {  
        Scanner scanner = new Scanner(System.in);  
        System.out.println("输入一个时间");  
        String s = scanner.nextLine();  
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        Date d = simpleDateFormat.parse(s);  
  
        System.out.println(d);  
    }  
}

时间差的计算:

package org.data;  
  
import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
public class testTime2Time {  
    public static void main(String[] args) throws ParseException {  
        String S1 = "2018-09-08 12:00:00";  
        String S2 = "2018-09-09 12:00:00";  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  
        Date d1 = sdf.parse(S1);  
        Date d2 = sdf.parse(S2);  
  
//        变成时间戳之后再相减。  
        long d3 = Math.abs(d2.getTime() - d1.getTime());  
  
//        把时间戳变回来。  
        long diffSec = d3/1000; //秒级别的  
//        除以1000是毫秒变秒,就是个进制转换。  
  
//        分钟  
        long diffMin = diffSec/60;  
  
//       显示成小时加分钟:  
        long diffHour = diffMin/60;  
        long diffMin1 = diffMin%60;  
//        天数:  
        int days = (int) ((d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));  
        System.out.println(days);  
  
    }  
}

依次类推就可以计算所有的时间差了

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

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

相关文章

【Oracle】20230106PLSQL中文不显示,全部为?解决流程

问题:查询的表中有中文数据,全部显示为? 解决途径1:修改注册表以及环境变量(改系统变量!不要只改用户变量) Oracle使用——PLSQL的中文乱码显示全是问号_海蓝树的博客-CSDN博客_plsql无法显示…

上线网站详细介绍(服务器购买-域名申请-SSL证书申请)

文章目录上线之前的准备工作,通俗的来讲:服务器是什么-云服务器购买域名解释-域名备案-域名如何申请①什么是域名,为什么要域名?②为什么非要域名备案和不备案的区别?③自己的主机怎么备案-自己的电脑可以作为服务器吗…

系分架构 - 软件架构设计

个人总结,仅供参考,欢迎加好友一起讨论 文章目录系分&架构 - 软件架构设计考点摘要概念架构的 4 1 视图软件架构风格经典五大架构风格调用/返回风格独立构件风格虚拟机风格仓库风格层次架构风格二层C/S架构三层C/S架构B/S架构混合架构风格闭环控制架…

Linux 软件管理 RPM 管理工具

概念引入 : # 首先提出一个问题,我们在 Linux 操作系统中是如何 安装软件的 ?? >>> 在 Linux 系统中,安装软件是有三种方式 >>> 第一种 : RPM 管理工具 第二种 : …

如何在新环境接手项目?(上)【洞见2】

01、世界真实情况根据IDC机构在2022年统计显示,截止2021年我国中小企业数量已达到4881万家,同比增长8.5%。中小企业的行业分布不均匀,超过70%的中小企业分布于专业服务业(含互联网和科技服务)、物流批发、零售和制造业…

剑指offer----C语言版----第十一天

目录 1. 数值的整数次方 1.1 运行超时的思路 1.2 思路一: 快速幂 (递归实现) 1.3 思路二: 快速幂 (迭代实现) 1. 数值的整数次方 原题链接: 剑指 Offer 16. 数值的整数次方 - 力扣(LeetCode)https://leetcode.cn/problems/shu-zhi-de-zheng-shu-ci-f…

web3学习:什么是以太坊

以太网是“世界的计算机”,这是以太坊平台的一种常见描述。这是什么意思呢?让我们首先从关注计算机科学的描述开始,然后对以太坊的功能和特性进行更实际的解读,并将其与比特币和其他分布式账本技术(简单起见&#xff0…

深度学习笔记:神经网络(2)

对于神经网络上一篇文章,可见:https://blog.csdn.net/Raine_Yang/article/details/128473486?spm1001.2014.3001.5501 神经网络各层信号传递的实现: 对于全连接网络,连接权重的个数为(前一层神经元总数 * 后一次神经…

el-table(type=“selection“)多选框两种回显

目录 一、前端数据回显(页面间数据展示) 1、图篇帮助理解 2、描述: 3、代码 4、两个API,一个v-model 二、数据库数据回显 1、描述: 2、核心代码: 3、比较完整代码:(这是element ui官方文档上的) 4…

XMLHttpRequest 对象(AJAX通信)

1.XMLHttpRequest 对象是什么? 浏览器与服务器之间,采用 HTTP 协议通信。用户在浏览器地址栏键入一个网址,或者通过网页表单向服务器提交内容,这时浏览器就会向服务器发出 HTTP 请求。 1999年,微软公司发布 IE 浏览器…

基于STM32F411使用SPI+DMA驱动LCD

先看效果 F411CE 硬件SPI+DMA驱动LCD基于HAL库 其实HAL库我用不太习惯,一直也是用的标准库 但HAL库确实是好上手一些,就迅速创建一个新的template 这次就当尝试一下吧,因为用的比较少,我会记录的详细 如图点击&…

火山引擎DataLeap数据调度实例的 DAG 优化方案

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 实例 DAG 介绍 DataLeap 是火山引擎自研的一站式大数据中台解决方案,集数据集成、开发、运维、治理、资产管理能力于一身的大数据研发治理套件。在平台中&…

从0到1完成一个Vue后台管理项目(四、引入axios、配置路由)

往期 从0到1完成一个Vue后台管理项目(一、创建项目) 从0到1完成一个Vue后台管理项目(二、使用element-ui) 从0到1完成一个Vue后台管理项目(三、使用SCSS/LESS,安装图标库) axios axios就是…

手握智算中心“绿洲”,毫末跑在中美自动驾驶长跑第一线

作者 | 白日梦想家 编辑 | 王博2022年过去,数据驱动成为自动驾驶演进共识。沿着数据驱动这条路线,自动驾驶加速迈入智算时代。 智算中心应运而生。 实际上,将智算引入自动驾驶的开先河者是特斯拉,其率先发布了专用于自动驾驶训练的…

登录与授权

目录 1.获取用户信息 1.button.open-type.getUserInfo 2.open-data组件 3.wx.getUserProfile(Object object) 头像昵称填写功能 2.登录 登录的流程图 sessin_key 3.授权 wx.openSetting wx.getSetting wx.authorize 手机号授权 登录与授权是两个不关联的事情&…

[Leetcode] 相同的树、对称二叉树

相同的树和对称二叉树都可以使用递归实现。相同的树题目链接:https://leetcode.cn/problems/same-tree/solution/xiang-tong-de-shu-by-leetcode-solution/1.1 递归、深度优先搜索使用递归,将问题转换为 --> 判断当前节点是否相同 判断左右子树分别是…

以前不知道字节面试难在哪,现在体验到了,被虐的很惨...

人们都说,互联网寒冬来了,这个时候还在大面积招人的公司,必然是牛逼的公司。而这个时候勇敢跳槽的人,必然是牛逼的人。于是我开始了字节跳动的社招面试。 为了这天,我前一天排老长的队,理了个利落的发型&a…

蚂蚁帮路由器Antbang A3s V2.0刷入OpenWrt/LEDE

参考资料路由器基本常识_冰色阳光的博客-CSDN博客_路由器bootloader是什么https://www.right.com.cn/forum/thread-3191610-1-1.html已知问题刷入OpenWrt/LEDE后,似乎路由器的Reset键不起作用。路由器在启动时,正常会先运行引导程序Breed,然后…

LinuxC—文件系统学习笔记

文件系统 1 目录和文件 1.1 获取文件属性信息stat 相关函数 stat() 得到file指向的文件并将其属性回填到buf中,面对符号链接文件时获取的是所指向的目标文件的属性 /* Get file attributes for FILE and put them in BUF. */ extern int stat (const char *__res…

Jetson nano 入手系列之5—远程可视化访问:jupyter lab与VNC连接

Jetson nano 入手系列之5—远程可视化访问:jupyter lab与VNC1. jupyter lab1.1 安装jupyter lab1.2 配置jupyter_lab1.3 打开jupyter lab1.3.1 ip地址方式打开1.3.2 cmd中ssh方式打开2. vino与VNC Viewer2.1 vino的安装2.2 Desktop Sharing配置与设置2.3 启动vino s…