百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Java时间类从此变得清晰明了 java时间日期类

bigegpt 2024-10-25 10:24 54 浏览

Java时间类

Java时间类分为Date 日期类和Calendar 日历类,相信很多小伙伴在初学时会对这个两个类的用法、区别以及有什么联系会感到疑惑,似乎懂了,但又不能具体说清,今天再带你来清晰的再次认识它俩!

Date 类

为了更直观了解,话不多说,直接上代码

【参考代码】

package date;
 
import java.util.Date;
 
public class Test {
    public static void main(String[] args) {
 
        Date d = new Date(); // 系统时间——运行程序时的时间
        System.out.println(d); // Fri Aug 13 08:03:49 CST 2021
 
        //使用Date类中对应的get方法用来获取具体时间:年月日,时分秒
        System.out.println(d.getYear() + 1900);// 年
        System.out.println(d.getMonth()+1);// 月
        System.out.println(d.getDate());// 日
        System.out.println(d.getHours());// 时
        System.out.println(d.getMinutes());// 分
        System.out.println(d.getSeconds());// 秒
 
        //Date类常用方法getTime();
        //getTime()——获取到时间的毫秒形式 返回的是long
        System.out.println(d.getTime());// 1628813591697
        
    }
}

输出结果:
Fri Aug 13 08:13:11 CST 2021
2021
8
13
8
13
11
1628813591697

注:年份是从1900年开始的;月份是从0开始的。
Markdown代码块里是不显示删除线的,这里截图给大家。通过上述get方法,Date类可以获取具体时间,不过,这些函数的 API 不易于实现国际化,官方不再推荐使用Date类来获取时间,推荐使用Calendar类。因此,这里删除线代表可以用但不推荐。

总结:对于Date类我们需要掌握:

1.new Date() 可以获取到系统时间
2.getTime() 能获取到时间的long形式,可以用来计算时间差

Calendar类

上面我们已经知道Date类不再推荐用来获取时间,而是推荐Calendar类,话不多说直接上代码

注:Calendar 日历类,是一个抽象类,里边提供了很多操作日历字段的方法如:YEAR、 MONTH、 DAY OF MONTH、HOUR。因此不可以去new对象。虽然抽象类不能创建对象,但是jdk官方提供了一个实例对象的操作:
Calendar cal = Calendar.getInstance();
我们通过这条代码就是直接造了一个Calender的对象

【参考代码】

package date;
import java.util.Calendar;
import java.util.Date;
 
public class TestCalendar {
    public static void main(String[] args) {
 
        Calendar cal = Calendar.getInstance();// 实例化对象
 
        System.out.println(cal);//java.util.GregorianCalendar[time=1628815192318,areFieldsSet=true,....]
 
        //用Calendar类get方法来获取具体时间
        System.out.println(cal.get(Calendar.YEAR));// 年  2021
        System.out.println(cal.get(Calendar.MONTH)+1);// 8月 月份从0开始
        System.out.println(cal.get(Calendar.DATE));// 日
        System.out.println(cal.get(Calendar.HOUR));// 时
        System.out.println(cal.get(Calendar.MINUTE));// 分
        System.out.println(cal.get(Calendar.SECOND));// 秒
 
        //用Calendar类set方法设置时间--->用于计算
        cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)+10);// 十年以后 2031
        System.out.println(cal.get(Calendar.YEAR));
        cal.set(Calendar.MONTH,cal.get(Calendar.MONTH)+4);// 3月以后 11 月份从0开始的
        System.out.println(cal.get(Calendar.MONTH));
        //...同理日,时分秒都可以设置并计算
        
    }
}

输出结果:
java.util.GregorianCalendar[time=1628815192318,areFieldsSet=true,....]
2021 // 年
8 // 月
13 // 日
9
5
22
2031 // 十年以后
11 //3月以后

【参考代码】

Calendar cal = Calendar.getInstance();// 实例化对象
 
get()方法解释:
get(你想获取的Canendar对象的信息)
例:cal.get(Calendar.YEAR);// 获取年份
 
set()方法解释:
set(需要设置的Calendar对象,获取该对象你需要信息)--->设置就可以用来计算
例:
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)+10);// 计算十年以后
System.out.println(cal.get(Calendar.YEAR));

Date类和Calendar类相互转换:

Date类和Calendar类既然有联系那必然可以相互转换,下面这段代码让大家更直观地了解:
【参考代码】

Date d = new Date();
System.out.println(d);
 
Calendar cal = Calendar.getInstance();//实例化对象
cal.getTime();
System.out.println(cal.getTime());
/*
输出结果:
Fri Aug 13 09:35:45 CST 2021
Fri Aug 13 09:35:45 CST 2021
 */

Calendar实例化的对象.getTime()就能获取到当前的系统时间,即一个Date对象,也就是Date d==cal.getTime();

Calendar类转成了Date类

   Calendar cal = Calendar.getInstance();
   Date d = cal.getTime();

Date类转成了Calendar类

    Date date = new Date();  
    Calendar cal = Calendar.getInstance();  
    cal.setTime(date); 

总结:对于Calendar类我们需要掌握:
1.get()方法 获取到时间的某一部分
2.set()方法 设置时间 - -> 计算时间:系统已经帮我们设置好了,不用担心二月有多少天等问题,计算时间十分方便
3.getTime()方法,得到的是一个Date类型的实例
4.setTime()方法,将Date类型的实例给到Calendar类

格式化时间

通过上面的学习,我们知道Date,Calendar类通过引用可以进行时间的格式化,将年月日、时分秒一个个例举出来,可见比较繁琐,而SimpleDateFormat类是专门帮我们格式化时间的工具类,format()方法 和 parse()方法 能够帮我们在时间和字符串之间相互转换,十分方便。它在java.text包中。

时间转成字符串:format(Date date)方法

format(Date) 帮我们把时间转成字符串,格式化时间。字符串的格式为SimpleDateFormat类定义对象时设置的时间格式

【时间格式】:yyyy-MM-dd HH:mm:ss
【参考代码】

package Simple;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;
 
public class Test {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d); //Thu Aug 12 08:40:08 CST 2021  不美观
 
        //设置格式化时间的模式,我们常用yyyy-MM-dd HH:mm:ss这个字符串模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 时间格式
        String s = sdf.format(d); // 格式化时间
        System.out.println(s); // 2021-08-12 08:45:09
    }
}

字符串转成时间:parse(String string)方法

【参考代码】

package Simple;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
 
public class Test2 {
    public static void main(String[] args) throws ParseException {
    
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个时间(yyyy-MM-dd HH:mm:ss):");
        String s = sc.nextLine();
 
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       Date d =  sdf.parse(s); // 把字符串转成时间
        System.out.println(d); //Thu Aug 12 12:25:21 CST 2021
        
    }
}

程序执行,输入和输出结果如下:
请输入一个时间(yyyy-MM-dd HH:mm:ss):
2021-08-12 12:25:21
Thu Aug 12 12:25:21 CST 2021

总结

看到这里,相信各位看官都对Java中的时间类的知识和使用有了一定了解,感谢各位看到这里!愿你韶华不负,青春无悔!

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...