【Java】基于util包的日期时间

咱们继续学Java——高级篇 第九十八篇:之Java 8日期时间API(与遗留代码互操作) 大家好!在我们对Java 8日期时间API的深入学习过程中,已经掌握了许多强大的日期时间处理功能。然而,在实际项目中,我们往往需要与遗留代码进行交互,这些遗留代码可能使用了Java早期的日期时间类,如 `java.util.Date`、`java.util.GregorianCalendar` 和 `java.sql.Date` 等。今天,我们将重点探讨Java 8日期时间API如何与这些遗留代码进行互操作,确保新老代码能够协同工作。我希望通过这篇博客,用通俗易懂的语言为大家详细讲解这些互操作的方法和要点 阅读详情

本文主要讲解在JDK1.8以前,Java对于日期时间的相关API。尽管现在已经有了新的API(java.time包),但对于java.util包中的日期时间API依然应用广泛,仍然具有学习的意义。此外,只有了解了util包中的API工作方式、缺陷之处,对于学习java.time包中的日期时间具有指导、借鉴意义。

本文的主要内容:

  • 日期时间Date类
  • 数据格式化SimpleDateFormat类
  • 日历Calendar类

目录

Date类

SimpleDateFormat类

Calendar类


Date类

所在的包:java.util.Date

核心原理:通过查看源码,发现其构造方法是调用System.currentTimeMillis()方法获得long类型整数日期(距离格林尼治时间——1970年1月1日0点的毫秒数,这个时间是为了纪念UNIX诞生);

构造方法(现在没有过时的就只有两个):

  1. Date() :创建的是一个表示当前系统时间的Date对象
  2. Date(long date) :根据"指定时间"创建Date对象

常用方法(目前未过时):Date类因为2000年出现的千年虫问题,导致该类很多方法过时,无法使用;

  1. getTime(); 返回 1970年1月1日00:00到当前系统时间经历的毫秒数
  2. setTime(); 设置 1970年1月1日00:00到time 的时间点

第一个Date实例

import java.util.Date;

public class TestDate {
	public static void main(String[] args) {
		Date date = new Date();
		System.out.println(date); //输出:Mon Aug 31 10:31:05 CST 2020
		System.out.println(date.getTime()); //输出:1598841065038
	}
}

SimpleDateFormat类

背景:

  1. 由于Date创建的日期对象显示的结果不符合中国的习俗,有些人看不懂,所以通过日期的格式化方法将其改为中国的时间显示方式;
  2. 同时也为了替代Date类中的已经过时了的方法;

层级关系:

java.lang.Object

  java.text.Format implements Serializable, Cloneable

    java.text.DateFormat

      java.text.SimpleDateFormat

SimpleDateFormat的两个重要功能:

  1. 格式转换(format):将日期转换为指定的格式(将Date对象转换为你想要的的显示方式)
    1. public String format(Date date)
    2. public String format(Object time)
  2. 时间解析(parse):将表示时间的字符串转为Date对象
    1. public Date parse(String date) throws ParseException

理解格式转换和时间解析:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestDate {
	
	public static void main(String[] args) {
		Date date = new Date();
		System.out.println("时间格式转换前:" + date); //Mon Aug 31 10:31:05 CST 2020
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		System.out.println("时间格式转换后:" +sdf.format(date));
		/* 上述代码输出;
		时间格式转换前:Mon Aug 31 13:36:06 CST 2020
		时间格式转换后:2020年08月31日 13:36:06
		*/

		String time = "2058年08月31日 13:36:06";
		try {
			System.out.println("SimpleDateFormat解析:" + sdf.parse(time));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		//上述代码输出:SimpleDateFormat解析:Sat Aug 31 13:36:06 CST 2058
	}
}

实例:

问题:请问 “2019-11-04 09:30:30” 往后 1天15小时,30分29s后的时间是多少?

算法:

  1. 将该字符串时间使用SimpleDateFormat进行parse为Date对象。
  2. 在Date对象上进行时间的加法。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        String date = "2019-11-04 09:30:30";

        System.out.println(timeCalculation(date));
        System.out.println(timeCalculation(""));
        System.out.println(timeCalculation("2020 11 1 09:20:33"));
    }

    /**
     * 功能:请问 “2019-11-04 09:30:30” 往后 1天15小时,30分29s后的时间是多少?
     * 输入:时间串
     * 输出:计算后的时间串
     * 算法:
     *  1.将该字符串时间使用SimpleDateFormat进行parse为Date对象。
     *  2.在Date对象上进行时间的加法。
     */
    public static String timeCalculation(String dateTime) {
        //注意:参数必须与被解析的时间的格式完全一致,否则抛出ParseException
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parseDate = new Date();
        String result = "";

        try {
            parseDate = simpleDateFormat.parse(dateTime);
            long newDate = parseDate.getTime() + (24L *60*60 + 15*60*60 + 30*60 + 29) * 1000; //小心溢出,使用L
            result = simpleDateFormat.format(newDate);
        } catch (ParseException e) {
            //e.printStackTrace();
            result = "解析异常,请检查入参格式";
        }
        return result;
    }
}

 

Calendar类

特性:

  1. 所在包java.util.Calendar
  2. 该类的存在就是为了操作时间;
  3. Calendar类是一个抽象类,没有自身的实现类,但是可以通过自身提供的getInstance获取一个实例;

第一个Calendar实例

import java.util.Calendar;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        //实例
        Calendar rightNow = Calendar.getInstance();

        //获取
        int year = rightNow.get(Calendar.YEAR);
        int days = rightNow.get(Calendar.DAY_OF_YEAR);
        Date date = rightNow.getTime(); //获取日期对象
        long time = rightNow.getTimeInMillis(); //此刻时间毫秒值

        //修改
        rightNow.set(Calendar.YEAR, 2022);

        //运算
        rightNow.add(Calendar.DAY_OF_YEAR , 701); //时间的加法操作
        rightNow.add(Calendar.HOUR , -15); //时间的减法操作
    }
}

总结:

  • 日期时间Date类:获取当前时间距离1970年1月1日0点的毫秒数
  • 数据格式化SimpleDateFormat类:将时间格式转换成自己想要的格式
  • 日历Calendar类:对时间进行操作(加减等运算)

 

语音数据标注工具与平台 最近在做语音深度学习的项目,整理了一下语音数据标注工具和语音标注平台,供大家参考 语音标注工具–Praat Praat是目前已经成为比较流行也比较专业的语音处理的软件,可以进行语音数据标注、语音录制、语音合成、语音分析等等,具有免费、占用空间小、通用性强、可移植性好等特点 官网链接 http://www.fon.hum.uva.nl/praat/ 汉化版下载 http://www.hejingzo... 阅读详情

相关推荐

CATIA CAA 二次开发去除面内开孔

测试模型: 代码说明:以下代码在拓扑级去除Face的内部loop,更改后的Body通过oispBody参数输出。主要使用CATSmartBodyDuplicator拓扑操作实现 HRESULT CAAStarterCmd::RemoveHoleOnFace(CATBody_var &ispBody,CATBody_var &oispBody){ CATLISTP(CATCell)olistFace; ispBody->GetAllCells(olistFace,2); CATF

weixin_45445751的博客 2264

Java 通俗讲解日期时间类【java.util包以及java.time包】

文章目录Date类构造器:DateFormat类构造方法:格式规则常用方法format方法parse方法Calendar类获取方式常用方法get/set方法add方法getTime方法 Date类 java.util.Date类,表示特定的瞬间,精确到毫秒 构造器: public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。 public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年

十一仓 1513

图像评价之计算PSNR、SSIM、MSE、LPIPS和NIQE评价指标

如果代码对你的研究有所帮助,请为该仓库点上小星星。

书山有路,学海无涯! 2643

Java中的时间和日期(二):java时间存储的基本原理

在java中,java.util.Date对象用于表示时间。这个对象既能表示日期,也能表示时间。原因在于这个对象内部实际上是一个long字符来存储的毫秒数。我们都知道时间通过System.currentTimeMillis()方法获取当前的系统时间戳,就能转换为我们所需要的时间: SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss:SSS"); System.out.println(current); System.out.

dhaibo1986的专栏 2504

【C2000系列DSP的Bootloader详解】如何利用脚本自动合并Bin文件

本文通过OutconvertBin.py实现了 C2000 Bootloader+UserApp 的「ELF 转 BIN+BIN 合并」全流程自动化,核心优势如下: 架构适配:严格遵循 C28x 16 位大端格式,生成的 BIN 文件可直接烧录; 自动化程度高:一键完成清理、转换、合并,无需手动执行多个命令; 可追溯性:生成 CRC32 校验值,便于验证文件完整性; 量产友好:合并后的merged.bin支持一次性烧录,提升量产效率。

昔时扬尘处 182

化工管道设计软件:CAESAR II二次开发_(6).API接口与函数库

自定义函数库是开发者根据特定需求编写的函数集合。这些函数可以扩展CAESAR II的功能,实现更复杂的管道设计任务。自定义函数库通常需要开发者具备一定的编程基础,能够理解和编写与CAESAR II接口兼容的代码。定义函数:在Python或其他编程语言中定义所需的函数。注册函数:将自定义函数注册到CAESAR II的函数库中。调用函数:在CAESAR II中调用自定义函数,实现特定功能。假设我们需要创建一个自定义函数库,用于批量修改管道节点的坐标。定义函数:在Python中定义一个函数,用于批量修改节点坐标。

kkchenjj的博客 1728

java学习笔记——java.util包中的日期时间、随机数类

java.util包中的日期时间、随机数类 文章目录java.util包中的日期时间、随机数类日期时间类Date类:日期DateFormat与SimpleDateFormatCalendar:日历类Random类 日期时间类 ​ java.util包也是java内置的一个工具包,它包含了集合框架、日期和时间、随机函数生成器等各种实用工具类。 Date类:日期 类 Date 表示特定的瞬间,精确到...

coydone的博客 546

基于YOLOv8的城市违建识别系统:从数据集构建到UI界面实现

YOLOv8是Ultralytics公司于2023年推出的最新一代YOLO(You Only Look Once)系列目标检测算法。更高效的骨干网络设计改进的锚框机制更精确的损失函数支持分类、检测、分割等多任务YOLOv8特别适合像违建识别这样的实时检测任务,能够在保持高精度的同时实现快速推理。

YOLO 674

时间日期工具类Util

今天在公众号中看到一篇关于Android时间日期的整理,然后觉得有一些是可取的,经过自己的一些调整、修改、增加和完善,决定放出来供大家参考,说好听点是为了节省不必要的开发时间和提高编码效率,难听点就是“可以偷懒”啦,无论如何,方便的东西才是好的,毕竟的确没有必要花费太多时间在这上面,下面粘贴代码,有不足之处请在评论说出,共同成长: public class DateUtil { final

lan_学习分享 865

利用Dify平台打造大学生专属AI模拟面试助手:从零到精通的完整指南

在这个充满竞争的就业市场中,拥有一个24小时在线的AI面试教练无疑是大学生求职路上的秘密武器。通过本文的指导,你已经掌握了使用Dify平台构建专业级模拟面试助手的全套技能。从环境部署、模型选择,到Prompt设计、知识库集成,再到高级功能开发和效果优化,我们一步步打造了一个能够适应不同岗位、提供专业反馈的智能面试系统。无论是技术岗的算法问答,还是咨询业的案例分析,或是外企的英语面试,你的定制助手都能提供针对性训练。更重要的是,这个方案具有极强的可扩展性。

专注于编程、AI、人工智能等多个领域内容研究和分析 2790

华为OD机试真题 新系统2026-04-01 Java&Go【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 2034

日期Util类

import org.apache.commons.lang.StringUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 日期Util类 * * @author calvin */ public class DateUt

岁寒松柏 470

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

1.Java中关于日期时间API的使用整合 - java.util包 和 java.text包

如果要用到关于日期时间API的话,这些文章应该能解决部分使用问题了。 单纯想到汉斯季默作曲的Time了,然后封面就搞了这个(乐

codeLearnerEternally的博客 1043

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java学习九—常用包(类)之java.util包

`java.util` 包是Java标准类库中的一个非常重要的组成部分,它提供了一系列对程序开发非常有用的类和接口。这个包主要包含集合框架、日期时间类、事件模型、随机数生成器以及其他实用工具类。

qq_17153885的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java.util 包

java.util 包

Jerry Lee の blog 2148

Java中日期时间如何表示?Java.util.Date类和Java8引入新的Java.time包有何区别?

​ 早期,用来处理日期和时间的类。但是在,它提供了更强大、更易用的日期和时间处理功能。我们先从Date类开始学习起,要想使用Date类下的方法,那么我们就需要初始化Date对象.

Stevedash的博客 302

Java 日期时间——《跟老吕学Java》

Java的日期时间API经历了从和到java.time包的演进,提供了更加直观、易用、灵活的日期时间处理方式。在Java 8及以后的版本中,你应该优先使用java.time包中的类来处理日期和时间。这些类不仅功能强大,而且设计良好,易于使用和理解。无论是获取当前日期时间、创建指定日期时间、进行日期时间的加减和比较,还是处理时区和格式化日期时间,java.time包都能提供你所需的所有功能。

Python老吕的博客 972

探索Java常用的包:从核心到扩展

Java中的各种包和类库为开发者提供了丰富的工具和功能,帮助开发者更高效地编写Java程序。本文介绍了一些常用的核心包和一些常见的扩展包,希望能够帮助读者更好地理解和利用Java编程语言的强大功能。

double222222的博客 1635

Java:核心包java.lang与java.util(必会知识点整理)

Java核心包(java.lang与java.util)及常用类详解

2301_80332713的博客 2074

【Java】基于time包的日期时间

自JDK1.8以后,Java在日期时间处理上引入了新的API,使得Java在日期时间上的处理更加逻辑严密。

极客-多重人格递归 1220

java.util

Util是utiliy的缩写,是一个多功能、基于工具的包。 java.util是包含集合框架、遗留的 collection类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包。 Java的实用工具类库java.util包。在这个包中,Java提...

大西瓜不甜的博客 335

实用工具类库java.util

本章介绍Java的实用工具类库java.util包。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。  图1.1给出了java

键者天行 7151

Java.util包简介并教您如何开发应用之二-Java基础-Java-编程开发

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/javascript"

java专栏 323

java.util包(二)

本章介绍Java的实用工具类库java.util包。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。  图1.1给出了java

非凡人生 755

Java日期时间处理:从基础到进阶的全面指南

本文介绍了Java日期时间处理的基础知识、Java 8的日期时间API以及实战应用。类是一个抽象类,它为特定瞬间与一组日历字段(如YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY等)之间的转换提供了一些方法,并为操作日历字段(如获得下个月的日期)提供了一些方法。在Java编程中,日期和时间的处理是一个常见的需求。下面我们将通过一个简单的实战应用来演示如何使用Java 8的日期时间API来处理日期时间。这个包提供了一套全新的类和方法,用于处理日期、时间、日期时间、时间间隔、时区等。

孤╮独的美 856
上一篇: 【Java】反射入门
下一篇: 【Java】基于time包的日期时间
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值