JAVA常用类 日期 时间

本文介绍了JAVA中处理日期时间的几个关键类,如System.currentTimeMillis()获取时间戳,Date的构造和方法,SimpleDateFormat用于日期格式化和解析,Calendar进行日期字段操作,以及JDK8引入的新日期时间API,包括LocalDate, LocalTime, LocalDateTime和Instant类,以及如何进行日期时间的格式化和解析。" 105270230,2603499,Linux上Docker、MySQL、Nginx和SpringBoot项目的部署实战,"['Linux运维', 'Docker容器', '数据库管理', 'Java开发', 'Web服务器']
摘要由CSDN通过智能技术生成

一、java.lang.System类

System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差(时间戳)。此方法适于计算时间差。·

计算世界时间的主要标准有:

UTC(Coordinated Universal Time)

GMT(Greenwich Mean Time)

CST(Central Standard Time)

二、java.util.Date类       

2.1、两个构造器的使用

(1)构造器一:Date(): 创建一个对应当前时间的Date对象

(2)构造器二:创建指定毫秒数的Date对象

2.2、两个方法的使用

toString():显示当前的年、月、日、时、分、秒

getTime():获取当前的Date对象对应的时间戳。

exp:

Date date1 = new Date(); //创建一个对应当前时间的Date对象

System.out.println(date1.toString());//Thirsday Oct 29 21:42:49 GMT+08:00 2020

System.out.println(date1.getTime());//21092009100940ms

三、java.text.SimpleDateFormat类

背景:Date类的API不易于国际化,大部分被废弃了, java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化:日期->文本、  解析:文本->日期

1、格式化:日期->指定格式的字符串(文本)

(1)SimpleDateFormat() :构造器:默认的模式和语言环境创建对象。此模式只能用固定格式处理日期

(2)public SimpleDateFormat(String pattern):构造器:可以用参数pattern指定的格式创建一个对象,该对象调用

(3)public String format(Date date):方法格式化时间对象date

2、解析:格式化的逆过程  指定格式字符串(文本)->日期

public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。需要注意格式,格式不对会抛异常

3、exp1 默认空参构造器创建 和 解析日期   默认日期格式

SimpleDateFormat sdf = new SimpleDateFormat();//使用空参构造器实例化SimpleDateFormat对象 sdf

Date date=new Date();//创建一个日期对象,默认是当前日期

String format=sdf.format(date);//通过对象调用类的format方法,格式化时间。日期->指定格式的字符串(文本)

String str = "20-10-29 下午14:20"; //注意,日期格式不对会抛异常

Date date1 = sdf.parse(str);//通过对象调用类的parse方法,解析字符串,以生成一个日期

exp2:用带参数的构造器,可以自己指定日期格式

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//按照指定格式实例化对象

String format1 = sdf1.format(new Date());//按照yyyy-MM-dd hh:mm:ss格式,格式化当前时间

Date date2 = sdf1.parse("2020-10-29 22:43:18);//注意格式,sdf1对象只能解析yyyy-MM-dd hh:mm:ss 字符串的时间

四、java.util.Calendar 日历类

4.1简介:

1、Calendar是一个抽象基类,主要用于完成日期字段之间的互相操作功能

2、获取Calendar实例的方法

(1)使用Calendar.getInstance()方法 //这个方法获取的还是子类GregorianCalendar的对象

(2)调用它的子类GregorianCalendar的构造器

3、一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR,MONTH,DAY_OF_WEEK,HOUR_OF_DAY,MINUTE,SECOND。这些常量是static 类属性

public void set(int field, int value) //将YEAR,MONTH等属性设定成指定值

public void add(int field,int amount) //再现有的时间上,加时间

public final Date get(int field) //field就是指的属性,就是YEAR,MONTH这些常量。就是获取年,月,日等

public final void setTime(Date date)  //将当前日历改成Date内容     Date类,转换为 日历类

public final void getTime(Date date) //日历类 转换为 Date类

注意:

获取月份时:一月是0,二月是1,以此类推,12月是11

获取星期时:周日是1,周一是2,,,,周六是7

exp:

Calendar calendar = Calendar.getInstance();//用类的static方法创建GregorianCalendar对象对象,因为抽象类没法实例化

int days = calender.get(Calender.DAY_OF_MONTH);//通过对象调用类的get方法,获取本月第几天

calender.set(Calender.DAY_OF_MONTH,22);//设置为本月第22天

calender.add(Calender.DAY_OF_MONTH,3);//再加3天,现在本月底25天

Date date = calendar.getTime(); //将calendar对象的时间转换为Date类 并赋值给date

calendar.setTime(date);//将date类日期作为参数给日历对象,日历对象的日期变成传入日期

五、 JDK8 新日期

5.1新日期时间API出现的背景

    如果我们可以跟别人说: “我们在1502643933071见面,别晚了! "那么就再简单不过了。但是我们希望时间与昼夜和四季有关,于是事情就变复杂了.JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:

(1)可变性:像日期和时间这样的类应该是不可变的。

(2)偏移性: Date中的年份是从1900开始的,而月份都从0开始。

(3)格式化:格式化只对Date有用, Calendar则不行。此外,它们也不是线程安全的;不能处理闰秒等。

5.2 新时间日期API 

        第三次引入的API是成功的,并且Java 8中引入的java.time API已经纠正了过去的缺陷,将来很长一段时间内它都会为我们服务。

       Java 8吸收了Joda-Time的精华,以一个新的开始为Java创建优秀的API新的java.time中包含了所有关于本地日期(LocalDate) 、本地时间(LocalTime)本地日期时间(LocalDateTime) 、时区(ZonedDateTime和持续时间(Duration)的类。历史悠久的Date类新增了tolnstant()方法用于把Date转换成新的表示形式。这些新增的本地化时间口期API大大简化了日期时间和本地化的管理。

java.time-包含值对象的基础包

java.time.chrono-提供对不同的日历系统的访问

java.time.format-格式化和解析时间和日期

java.time.temporal-包括底层框架和扩展特性

java.time.zone-包含时区支持的类

说明:大多数开发者只会用到基础包和format包,也可能会用到temporal包。因此,尽管有68个新的公开类型,大多数开发者,大概将只会用到其中的三分之一。

5.3 本地日期(LocalDate) 、本地时间(LocalTime)、本地日期时间(LocalDateTime)

    这三个类的实例是不可改变对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关内容的信息

     类似于Calendar类,但是相比不用修正偏差,并且方法带返回值,本身不直接改变对象里的内容。是否覆盖原对象,看开发者心情了。

LocalDate 代表 IOS格式(yyyy-MM-dd)的日期,可以存储生日、纪念日等日期。(年月日)

LocalTime表示一个时间,而不是日期。(时分秒)

LocalDateTime用来表示日期和时间,最常用类之一。(年月日+时分秒)

说明:ISO-8601日历系统是国际标准组织制定的现代公民的日期和时间的表示法,也就是公历。

1、实例化方法     三个类的方法都一样,以LocalDateTime为例

(1)用类的static方法,now()方法来实例化不对,非用构造器

语法:类名 变量名 = LocalDateTime.now();

exp:  LocalDateTime localDateTime=LocalDateTime.now(); //用类的now()方法实例化了一个LocalDateTime对象

(2)用类的static方法,of()方法 可设置指定的年、月、日、时、分、秒(比起前面的好处是 没有偏移量

语法:类名 变量名 = LocalDateTime.of(int year,int month,int day,....);

exp:LocalDateTime localDateTime1=LocalDateTime.of(2020,11,1,14,17,15);

说明:用类的of()方法实例化了一个LocalDateTime对象,2020年11月1日14时17分15秒

2、获取那些实例化好的时间对象里面的时间(对象属性)  方法 getXxx()

语法:时间对象.getDayOfMonth();

exp:LocalDateTime localDateTime1=LocalDateTime.of(2020,11,1,14,17,15);

       localDateTime1.getDayOfMonth();//输出1,本月第一天

说明:获取当前时间对象表示的是这个月第几天(某个属性)。getXxx可以获取很多的属性,具体查字典啦

3、withXxx()方法  设置对象表示的时间  具体查字典

5.4 instant类 瞬时   给计算机看的,前面的是给人看的

1、Instant类 瞬时 简介

      Instant:时间线上的一个瞬时点。这可能被用来记录应用程序中的事件时间戳。

     类似于java.util.Date类  很多方法和属性都相似。

     在处理时间和日期的时候,我们通常会想到年,月,日,时,分,秒。然而,这只是时间的一个模型,是面向人类的。第二种通用模型是面向机器的,或者说是连续的。在此模型中,时间线中的一个点表示为一个很大的数,这有利于计算机处理。在UNIX中,这个数从1970年开始,以秒为的单位;同样的,在Java中,也是从1970年开始,但以毫秒为单位。

      java.time包通过值类型Instant提供机器视图,不提供处理人类意义上的时间单位。Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。因为java.time包是基于纳秒计算的,所以Instant的精度可以达到纳秒级。

(1 ns=10负九次方秒) 1秒= 1000毫秒=10^6微秒=10^9纳秒

2、实例化方法:

(1)静态方法now()  静态方法,默认返回UTC时区的Instant类对象

语法:Instant 类对象名 = Instant.now(); //通过类的静态方法now() 实例化Instant对象

exp:Instant instant = Instant.now(); 

说明:这个时间不是我们实际的时间啦。是本初子午线时区的时间。我们的时间要在那个基础上+8个小时。

(2)ofEpochMilli():类的static方法 通过给定的毫秒数,获取Instant实例

语法:Instant 类对象名 = Instant.ofEpochMilli(long 毫秒数);

exp:Instant instant1 = Instant. ofEpochMilli(12124123123123123L);

3、其他方法 查字典

5.5 格式化与解析日期或时间 java.time.format.Date TimeFormatter类

说明:定义一个格式对象,去格式化各种时间类对象

1、简介:

    该类用于格式化或解析日期、时间。类似于SimpleDateFormate。 即将日期或时间转成字符串

2、实例化格式对象  (只说重点方法,其他查字典)

语法:DateTimeFormatter 对象名 = 类名.ofPattern("自定义时间格式");//后面就会按照这个格式去解析时间对象

exp:DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); /*实例化时间格式对象,将格式设置为yyyy-MM-dd hh:mm:ss*/

      String str = formatter3.format(LocalDateTime.now()); //按照yyyy-MM-dd hh:mm:ss格式,格式化时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值