概述
java中的时间类
一、JDK1.8之前日期和时间的API
1、public.long.System类提供了大量静态方法,可以获取与系统相关的信息或系统级操作,常用方法:
public static long currentTimeMillis();
{返回当前时间与1970年1月1日0时0分0秒一毫秒为单位的时间差}--返回的这个数称为一个时间戳{常用于测试程序效率}
2、毫秒:
毫秒的换算:
1000分之一秒,1000毫秒=1秒
毫秒作用:
可以对时间日期进行计算:日期转换成毫秒进行计算
日期转换成毫秒:
当前日期:2088-08-08
时间原点(0毫秒):1970年1月1日00:00:00(格林尼治时间)
就是计算当前日期到时间原点一共经历了多少毫秒
注:
中国属于东八区,会把时间增加8小时:1970年1月1日08:00:00
毫秒转换为日期:
1天=24 x 60 x 60秒=86400000毫秒
3、java.util.Date类
|--->java.sql.Date:
表示日期和时间类;类Date表示特定瞬间,精确到毫秒
注:
1.两个构造器的使用
构造器一:
Date():
创建一个对应当前时间的Date对象,获取当前系统的日期和时间
构造器二:
new Date(long 时间L);
创建指定毫秒数的Date对象,即传递毫秒值,把毫秒值转换为Date日期
2.两个方法的使用
>toString():
显示当前的年、月、日、时、分、秒
>getTime():
获取当前Date对象对应的毫秒数时间戳(把日期转换为毫秒值)
相当于:System.currentTimeMillis();方法
返回自1970年1月1日08:00:00 CST 以来此Date对象表示的毫秒数
3.java.sql.Date对应数据库中的日期类型的变量
> 关于实例化:
new java.sql.Date(long 时间L);
> sql.Date--->util.Date对象,
直接赋值,多态
> util.Date--->sql.Date对象{
Date dateSix = new Date();
java.sql.Date dataSeven=new java.sql.Date(dateSix.getTime());
}
4、java.text.DateFormat:时间、日期格式化子类的抽象类
作用:
格式化(日期-->文本),解析(文本-->日期)
成员方法:
String format(Date date):
按照指定模式,把date日期,格式化为符合模式的字符串(文本)
使用步骤:
1.创建SimpleDateFormat对象,
构造方法中传递指定模式
2.调用SimpleDateFormat对象中的方法format,
按照构造方法中的指定模式,
把Date日期格式化为符合模式的字符串(文本)
Date parse(String source)
把符合模式的字符串(文本),解析为date日期
使用步骤:
1.创建SimpleDateFormat对象,
构造方法中传递指定模式
2.调用SimpleDateFormat对象中的方法parse,
把符合构造方法模式的字符串解析为日期
注:
public Date parse(String source)throws ParseException
parse方法声明了一个异常ParseException
如果字符串和构造方法的模式不一样,那么程序就会抛出此异常
调用一个抛出异常的方法,就必须处理此异常,
要么throws继续抛出此异常,要么try catch自己处理这个异常
DateFormat是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类:
java.text.SimpleDateFormat extends DateFormat
SimpleDateFormat的使用:
SimpleDateFormat对日期Date类的格式化和解析
1.两个操作
1.1格式化:日期-->字符串
new SimpleDateFormat();
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
1.2解析:格式化的逆过程,字符串-->日期
调用parse("指定格式化时间")方法
2.构造方法:
SimpleDateFormat(String pattern):
用给定的模式和默认环境的日期格式符号构造
参数:
String pattern:传递指定模式。【模式:区分大小写】
y 年;M 月;d 日;H 时;m 分;s 秒
写对应模式,会把模式替换为对应的日期和时间
“yyyy-MM-dd HH:mm:ss”
注:
模式中的字母不能更改,连接模式中的符号可以改变
“yyyy年MM月dd日 HH时mm分ss秒”
3.SimpleDateFormat的实例化:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
System.out.println(sdf.format(date));
5、java.util.Calendar类:日历类
Calendar类是个日历类,里面提供了很多操作日历字段的方法(YEAR,MONTH,DYA_OF_MONTH,HOUR)
Calendar类无法直接创建对象使用,里面有个静态方法getInstance(),该方法返回了Calendar类的子类对象
static Calendar getInstance()使用默认时区和语言环境获得一个日历
Calendar日历类的使用
1.实例化:
1.1调用GregorianCalendar的构造器
1.2调用Calendar.getInstance()方法
2.常用方法:
public int get(int field):
返回给定日历字段值
参数:
传递指定的日历字段(YEAR,MONTH,DATE,DYA_OF_MONTH,HOUR,MINUTE,SECOND)
返回值:
日历字段代表的具体值
public void set(int field,int value):
将给定的日历字段设置为给定值
参数:
int field:
传递指定的日历字段(YEAR,MONTH,DATE,DYA_OF_MONTH,HOUR,MINUTE,SECOND)
int value:
给指定字段设置的值
public abstract void add(int field,int mount):
由日历的规则,为给定的日历字段添加或减去指定的时间量
把指定的字段增加/减少指定的值
参数:
int field:
传递指定的日历字段(YEAR,MONTH,DATE,DYA_OF_MONTH,HOUR,MINUTE,SECOND)
int mount:增加/减少指定值
整数:增加 负数:减少
public Date getTime():
返回一个表示此Calendar时间值(从历元到现在的毫秒变量)的Date对象
把日历对象转换为日期对象
public Date setTime():
设置一个表示此Calendar时间值(从历元到现在的毫秒变量)的Date对象
方法的参数:
int field:
日历类字段,可以使用Calendar类的静态成员变量获取
public static final int 【YEAR,MONTH,DATE,DYA_OF_MONTH,HOUR,MINUTE,SECOND】
3.在日历类中:
获取月份时:一月是0...十二月是11
获取星期时:周日是1,周一是2...周六是7
4.jdk8之前(不含jdk8)的Calendar类存在的问题:
4.1:可变性:像日期和时间这样的类实际上是不可变的
4.2:偏移性:Date当中的年份是从1990年开始的,而月份都是从0开始
4.3:格式化:格式化只对Date有用,Calendar则不行
4.4:它们也不是线程安全的;不能处理润秒等
二、DK1.8中常用日期和时间的API
1、LocalDate、LocalTime、LocalDateTime的使用:
前提:
这三个类有点类似于Calendar类;在jdk8之后才有的这三个类,在jdk8之前需要额外进行导包Joda-Time
说明:
1.LocalDateTime
相比于另外两个类较为常用
2.now();方法作用:
将三个类进行实例化,调用当前的日期、时间、日期+时间
3.of();方法作用:
指定特定的年月日时分秒不存在偏移量
4.getXxx();方法作用:
获取Xxx指定的时间
5.withXxx();方法作用:
修改日期相关属性,体现其修改的不可变性
6.plusXxx();方法作用:
对现有时间进行增加属性处理,体现其修改的不可变性
7.minusXxx();方法作用:
对现有时间进行减少属性处理,体现其修改的不可变性
2、Instant的使用:
类似于java.util.Date类
1、实例化:调用now();获取本初子午线对应的标准时间
2、设置偏移量:调用atOffset(ZoneOffset.ofHours(int hour))
3、toEpochMilli():获取从1970年1月1日0时0分0秒开始到调用此方法时的毫秒数--->Date类的getTime()
4、ofEpochMilli(long XxxL);通过给定的毫秒数,获取Instant实例-->Date(long millis)
3、DateTimeFormatter:格式化或解析日期、时间;类似于SimpleDateFormat
1.实例化:
方式一:
预定义标准格式:ISO_LOCAL_DATE_TIME,ISO_LOCAL_DATE,ISO_LOCAL_TIME
方式二:
本地化相关的格式,如:
ofLocalizedDateTime();
ofLocalizedDateTime(FormatStyle.LONG);
其中
{FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT:适用于LocalDateTime}
本地化相关的格式:如:
ofLocalizedDate()
其中
{
FormatStyle.FULL/FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT:
适用于LocalDate
}
方式三:
自定义:如ofPattern("yyy-MM-dd hh:mm:ss E")
2.格式化:
先实例化LocalXxx,然后再调用format()方法返回新的字符串对象
3.解析:
调用DateTimeFormatter实例对象的parse()方法传递正确参数
4、JDK8之前和JDK8中日期、时间相关的类有:
java.util.Date和java.sql.Date -> Instant
SimpleDateFormat ----> DateTimeFormatter
Calendar ----> LocalDate、LocalTime、LocalDateTime
5、日期时间api的迭代
第一代:jdk1.0 Date类
第二代:jdk1.1 Calendar类,一定程度上替代了Date类
第三代:jdk1.8 提出了新的一套api
6、jdk8之前的日期时间的API测试
1.System类中的currentTimeMillis();
2.java.util.Date和子类java.sql.Date
3.SimpleDateFormat
4.Calendar
时间类程序小实例:
private static void demo01() {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
创建SimpleDateFormat对象,构造方法中传递指定模式
//String format(Date date),
按照指定模式,把date日期,格式化为符合模式的字符串
Date date=new Date();
String d = sdf.format(date);
调用SimpleDateFormat对象中的方法format,
按照构造方法中的指定模式,
把Date日期格式化为符合模式的字符串(文本)
System.out.println(date);
Tue Sep 29 16:12:35 CST 2019
System.out.println(d);
2019年09月29日 16时12分35秒
}
以上是本篇小节,不喜勿喷,感谢理解。
相关链接:
【JAVASE(6)】JAVASE学习--字符串篇_lixxkv的博客-CSDN博客
【JAVASE(4)】JAVASE学习--线程篇_lixxkv的博客-CSDN博客
最后
以上就是光亮墨镜为你收集整理的【JAVASE(5)】JAVASE学习--时间篇的全部内容,希望文章能够帮你解决【JAVASE(5)】JAVASE学习--时间篇所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复