【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection

2024-06-14 01:32

本文主要是介绍【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection


1.Date及其常用API

1)JAVA 中的时间

Java中的时间使用标准类库的Date类表示,是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点。

固定的时间点叫纪元(epoch),是UTC时间1970年 1月 1日 00:00:00。

UTC(Universal Time Coordinated世界调整时间)与GMT(Greenwich Mean Time格林威治时间)一样,是一种具有实际目的的科学标准时间。


2)Date类简介

java.util.Date 类封装日期及时间信息。

Date类的大多数用于进行时间分量计算的方法已经被Calendar取代。


3)setTime与getTime方法

void setTime(long time):

该方法用于为一个Date对象设置其需要表示的时间,该参数为一个long值,其含义是需要表示的这个时间点距离1970年1月1日 00:00:00之间的毫秒差。

long getTime()

该方法用于获取一个Date对象所表示的时间点,该返回值为一个long值,表示该时间点距离1970年1月1日 00:00:00之间的毫秒差。


4) Date 重写 toString方法

Date重写了toString()方法,用一个字符串来描述当前Date对象所表示的时间。

格式如下:
    Mon Feb 17 15:36:55 CST 2014

代码演示:

package day03;import java.util.Date;/*** java.util.Date* 其每一个实例用于表示一个时间点* 内部维护一个long值,该值是从UTC时间的1970/01/01 00:00:00* 至当前Date表示的时间点之间的毫秒差**/
public class DateDemo01 {public static void main(String[] args) {/** 默认创建出来的Date实例表示当前系统时间*/Date date = new Date();/** Date类重写类toString,只是对于非英语国家来说不是很友好*/System.out.println(date); //Mon Aug 24 21:37:16 CST 2015/** 获取Date内部维护的long值*/long longTime = date.getTime();System.out.println(longTime); //1440423436050//表示明天当前时间longTime += 1000*60*60*24;/** 支持传入long值的构造方法* 创建的Date就表示该long值所表示的时间*/Date tomrrowDate = new Date(longTime);System.out.println(tomrrowDate); //Tue Aug 25 21:37:16 CST 2015/** 也可以在现有的Date对象上调用setTime方法* 将long值传入,使其表示这个时间*/date.setTime(longTime);System.out.println(date); //Tue Aug 25 21:37:16 CST 2015}}

2.SimpleDateFormat

1)SimpleDateFormat简介

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

简单的说,SimpleDateFormat就是根据一个特定的日期格式在字符串与Date之间相互转换。


2)日期模式匹配字符串

日期模式的匹配字符串如下表:

例如: yyyy年MM月dd日--HH:mm:ss 可以匹配 2014年01月06日--13:22:41


3)将Date格式化为String

将Date格式化为String,我们需要使用SimpleDateFormat提供的方法:

    String format(Date d)

代码演示:

package day03;import java.text.SimpleDateFormat;
import java.util.Date;/*** java.text.SimpleDateFormat* 该类的作用是使用给定的字符串格式在Date与String之间进行转换。* 对于该类,需要掌握:* 1:会写日期格式字符串* 2:记住两个转换方法(String->Date,Date->String)**/
public class SimpleDateFormatDemo01 {public static void main(String[] args) {Date now = new Date();System.out.println(now);/** 2015-08-24 09:50:12* yyyy-MM-dd HH:mm:ss*/SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");/** String format(Date date)* 按照创建SimpleDateFormat时指定的日期格式,* 将当前给定的date对象表示的时间转换为字符串。*/String str = sdf.format(now);System.out.println(str);}}


4)将String解析为Date

将String格式化为Date,我们需要使用SimpleDateFormat提供的方法:

    Date parse(String s)


代码演示:

package day03;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/**将字符串按照该日期格式解析为Date**/
public class SimpleDateFormatDemo02 {public static void main(String[] args) {String str = "2008-08-08 20:08:08";System.out.println(str);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {/** Date parse(String str)* 将给定的字符串解析为Date对象并返回。*/Date date = sdf.parse(str);System.out.println(date);} catch (ParseException e) {e.printStackTrace();}}}

3.Calendar类

1)Calendar 简介

java.util.Calendar 类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。

Calendar是抽象类,其具体子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高里历,即通用的阳历),对应世界上绝大多数国家/地区使用的标准日历系统。


2)getInstance()方法

Calendar是抽象类,其提供了一个工厂方法:Calendar getInstance()。该方法可以根据当前系统所在地区获取一个适当的Calendar的子类实现。

在实际开发中,也推荐使用该方法来实例化Calendar的对象。


3)setTime与getTime方法

Calendar的void setTime(Date date),允许我们为Calendar设置Date对象所表示的时间。

Calendar的 Date getTime(),允许我们获取一个使用Date对象描述的Calendar所表示的时间。

代码演示:

package day03;import java.util.Calendar;
import java.util.Date;/*** java.util.Calendar* ---public abstract class Calendar* 日历类,用作操作时间。* 常用的是格里高利历法(阳历)* 默认创建出来的Calendar实现类的实例表示当前系统时间**/
public class CalendarDemo01 {public static void main(String[] args) {/** Calendar的getInstance可以根据当前系统所在地区* 创建合适的实现类,通常是格里高利历法。*/Calendar calendar = Calendar.getInstance();/** 不能直观看到具体表示的时间。*/System.out.println(calendar);/** Calendar -> Date* * Date getTime()* Calendar提供的getTime方法可以将其表示的时间以Date形式返回。*/Date date = calendar.getTime();System.out.println(date);/** Date -> Calendar* * void setTime(Date date)* Calendar提供了一个setTime()方法,可以使当前* Calendar表示给定的date所表示的时间。*/Date now = new Date();calendar.setTime(now);System.out.println(calendar);}}

4)设置日期及时间分量

Calendar提供了一种通用的设置时间的方式:

    void set(int field,int value)

该方法可以通过对不同的时间分量分别设置不同的值。Calendar对不同的时间分量提供了相应的常量,我们在使用set方法设置时,第一个参数就应当使用对应的常量作为时间分量。

代码演示:

package day03;import java.util.Calendar;/*** Calendar提供类一个set方法,允许我们对当前Calendar* 的各个时间分量进行单独设定。**/
public class CalendarSet {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();System.out.println(calendar.getTime());/** 设置各个时间分量,* 使其表示:2008/08/08 20:08:08* 需要注意。设置了某个时间分量的值可能会影响其他时间分量的值。* 例如:设置了年、月、日可能会将星期改变。*///设置年份calendar.set(Calendar.YEAR,2008);//设置月份//月份从0开始,有常量对应。0表示1月。。。calendar.set(Calendar.MONTH,7);//设置日//Calendar.DATE==Calendar.DAY_OF_MONTHcalendar.set(Calendar.DAY_OF_MONTH,8);//设置小时//Calendar.HOUR_OF_DAY :24小时制//Calendar.HOUR        :12小时制calendar.set(Calendar.HOUR_OF_DAY,20);//设置分钟calendar.set(Calendar.MINUTE,8);//设置秒calendar.set(Calendar.SECOND,8);System.out.println(calendar.getTime());}}

5) 获取时间分量对应的值

Calendar提供了一种通用的获取时间分量的方式:

    int get(int field)

该方法可以通过对不同的时间分量获取相应的值。Calendar对不同的时间分量提供了相应的常量,我们在使用get方法获取时,参数就应当使用对应的常量作为时间分量。


6)getActualMaximum方法

   int getActualMaximum(int field)方法用于获取给定时间分量所允许的最大值。

代码演示:

package day03;import java.util.Calendar;/*** Calendar提供了一个get方法,可以获取给定的时间分量所对应的值。**/
public class CalendarGet {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();//获取年int year = calendar.get(Calendar.YEAR);//获取月,从0开始int month = calendar.get(Calendar.MONTH)+1;//获取日int day = calendar.get(Calendar.DATE);		System.out.println(year+"-"+month+"-"+day);//获取星期,每周第一天从星期日开始(1表示周日)int week = calendar.get(Calendar.DAY_OF_WEEK);System.out.println(week==1?7:week-1);/** int getActualMaximum(int field)* Calendar提供了一个方法,可以获取给定的时间分量* 在当前Calendar表示的日期中所允许的最大值。* 查看当月的月底--Calendar.DAY_OF_MONTH*/int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);System.out.println("这个月:"+days+"天");/** 今年多少天?--Calendar.DAY_OF_YEAR*/days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);System.out.println("今年共:"+days+"天");}}

7) add方法

Calendar还允许我们使用统一的方式来对某个时间分量的值进行计算。我们需要使用方法

    void add(int field,int amount)

该方法可以为某个时间分量的值加上给定的值,若想减去给定的值,那么传入的值需要是负数即可。并且计算后会自动进行相应的进位,例如若当前为月底,那么加一天后,为下个月的月初,而月就会进位。

package day03;import java.util.Calendar;/*** Calendar提供了一个add方法,用于计算时间。* void add(int field,int value)* 对于给定的时间分量加上给定的值,若value为负数,* 则减去指定的值。**/
public class CalendarAdd {public static void main(String[] args) {Calendar calendar = Calendar.getInstance();//calendar.add(Calendar.YEAR,1);System.out.println(calendar.getTime());/** 查看3年零2个月又25天是那天?*/calendar.add(Calendar.YEAR,3);calendar.add(Calendar.MONTH,2);calendar.add(Calendar.DAY_OF_YEAR,25); //可能会跨年,故用DAY_OF_YEAR//calendar.add(Calendar.DATE,25);System.out.println(calendar.getTime());//减去4年calendar.add(Calendar.YEAR,-4);System.out.println(calendar.getTime());}}

4.Collection

java提供了一种可以存数一组数据的数据结构,其提供了丰富的方法,在实际开发中往往比数组使用的广泛。这种数据结构成为集合:Collection。

Collection是一个接口,其定义了集合的相关功能方法。

1) List和Set

Collection派生出了两个子接口,一个是List另一个则是Set。

List:称为可重复集,顾名思义,该集合中是允许存放重复元素的,那么何为重复元素?重复元素指的并非是同一个元素,而是指equals方法比较为true的元素。

Set:称为不可重复集,所以,该集合中是不能将相同的元素存入集合两次,同List,这里相同指的也是两个元素的equals比较结果为true。


2) add()、size()、clear()、isEmpty()方法

Collection定义了一个add方法用于向集合中添加新元素。 该方法定义为:

boolean add(E e)

该方法会将给定的元素添加进集合,若添加成功则返回true,否则返回false。

size方法用于获取当前集合中的元素总数。该方法定义为:int size()

clear方法用于清空集合。该方法定义为:void clear()

isEmpty方法用于判断当前集合中是否不 包含元素。该方法定义为:boolean isEmpty()

代码演示:

package day03;import java.util.ArrayList;
import java.util.Collection;/*** java.util.Collection* 集合,用于存放一组元素。* 提供类若干功能,比数组使用方便。**/
public class CollectionDemo01 {public static void main(String[] args) {Collection c = new ArrayList();/** boolean add(E e)* 将当前集合中添加给定的元素* 若成功添加则返回true*/c.add("one");c.add("two");c.add("three");c.add("four");/** int size()* 获取当前集合中的元素个数*/System.out.println("size:"+c.size()); //size:4/** boolean isEmpty()* 判断当前集合是否不包含任何元素* 当集合中没有元素时返回true*/boolean b = c.isEmpty();System.out.println(b); //false/** void clear()* 清空集合元素*/c.clear();System.out.println("size:"+c.size()); //size:0System.out.println(c.isEmpty()); //true}}

3)contains方法

boolean contains(Object o)

该方法会用于判断给定的元素是否被包含在集合中。若包含则返回true,否则返回false。

这里需要注意的是,集合在判断元素是否被包含在集合中是使用元素的equals的比较结果。

(o==null ? e==null : o.equals(e)) 其中e是集合中的元素。

代码演示:

package day03;import java.util.ArrayList;
import java.util.Collection;/*** 判断集合是否含有给定的元素**/
public class CollectionDemo02 {public static void main(String[] args) {Collection c = new ArrayList();c.add(new Aoo("zhangsan",21));c.add(new Aoo("lisi",22));c.add(new Aoo("wangwu",23));/** 集合的toString格式* [元素1.toString(),元素2.toString()...]*/System.out.println(c); //[zhangsan,21, lisi,22, wangwu,23]Aoo a = new Aoo("zhangsan",28);/** boolean contains(E e)* 判断当前集合是否包含给定元素,包含则返回true* 判断依据是看给定的元素与集合中现有的元素是否* 存在equals比较为true的,有则认为包含!*/boolean contains = c.contains(a);System.out.println("contains:"+contains); //contains:true}}


4)集合持有对象的引用

集合中存储的都是引用类型的元素,那么引用类型变量实际上存储的是对象的“地址”,所以实际上集合只存储了元素对象在堆中的地址。而并不是将对象本身存入了集合中。

代码演示:

package day03;import java.util.ArrayList;
import java.util.Collection;public class CollectionDemo03 {public static void main(String[] args) {Collection c = new ArrayList();Aoo o = new Aoo("zhangsan",23);c.add(o);System.out.println(c); //[zhangsan,23]o.setName("lisi");System.out.println(c); //[lisi,23]}}


这篇关于【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059000

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

22.手绘Spring DI运行时序图

1.依赖注入发生的时间 当Spring loC容器完成了 Bean定义资源的定位、载入和解析注册以后,loC容器中已经管理类Bean 定义的相关数据,但是此时loC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况 发生: 、用户第一次调用getBean()方法时,loC容器触发依赖注入。 、当用户在配置文件中将<bean>元素配置了 lazy-init二false属性,即让