目录
JDK8之前的日期时间API
java.lang.System类
java.util.Date类
两个构造器的使用
两个方法的使用
java.sql.Date类
涉及两个问题:
java.text.SimpleDateFormat类
格式化:日期--->字符串
解析:字符串--->日期(格式化的逆过程)
java.util.Calendar(日历)类
获取Calendar实例的方法
Calandar类的常用方法
JDK8之前的日期时间API
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)
- CST可以代表如下 4 个不同的时区://CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间
- Central Standard Time (USA) UT-6:00
- Central Standard Time (Australia) UT+9:30
- China Standard Time UT+8:00
- Cuba Standard Time UT-4:00
- CST可以代表如下 4 个不同的时区://CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间
java.util.Date类
表示特定的瞬间,精确到毫秒
两个构造器的使用
- 构造器一:util下的Date():创建一个对应当前时间的Date对象
- 构造器二:util下的Date(long date):创建一个指定时间的Date对象
两个方法的使用
- 方法一:toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准)
- 方法二:getTime():获取当前Date对象所对应的毫秒数(时间戳:自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象 表示的毫秒数)
import org.junit.Test;
import java.util.Date;
public class DateTimeTest {
@Test
public void test1(){
//构造器一:util下的Date():创建一个对应当前时间的Date对象
Date date1 = new Date();
System.out.println(date1.toString());
System.out.println(date1.getTime());
//构造器二:util下的Date():创建指定时间的Date对象
Date date2 = new Date(1669275759155L);
System.out.println(date2.toString());
}
}
运行结果:
java.sql.Date类
java.sql.Date类对应着数据库中的日期变量类型
涉及两个问题:
- 1、如何实例化sql.Date对象
- 2、util.Date和sql.Date对象如何相互转换
package com.light.java;
import org.junit.Test;
import java.util.Date;
/**
* @auther light
* @Description JDK8之前的日期时间API
* @create 2022-11-24 15:35
*/
public class DateTimeTest {
/**
* |---java.sql.Date类
* java.sql.Date:对应这数据库中的日期类型变量
* >如何实例化
* >sql.Date--->util.Date(直接赋值:多态)
*
* >如何将java.util.Date对象转换为java.sql.Date对象:
*
*/
@Test
public void test1(){
System.out.println("\n**********************sqlDate**************************");
//创建SQL类中的Date对象
java.sql.Date date3 = new java.sql.Date(1669276192545L);
System.out.println(date3.toString());//只输出年月日
System.out.println("\n**********************sql.Date--->util.Date(直接赋值:多态)**************************");
Date date4 = new Date();
date4=date3;
System.out.println(date4.toString());
System.out.println("\n**********************将java.util.Date对象转换为java.sql.Date对象**************************");
//从父类-->子类
Date date5=new Date();
java.sql.Date date6=new java.sql.Date(date5.getTime());//利用getTime()方法获取util.Date和sql.Date中共有的部分
System.out.println(date6.toString());
}
}
运行结果
java.text.SimpleDateFormat类
Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat 类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
格式化:日期--->字符串
- SimpleDateFormat():默认模式的语言环境创建对象(默认构造器)
- SimpleDateFormat(String pattern):该构造器可以用参数pattern指定的的格式创建一个对象,该对象调用:
- public String format(Date date):方法格式化时间对象
解析:字符串--->日期(格式化的逆过程)
- public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @auther light
* @Description JDK 8之前的日期时间的API测试
* SimpleDateFormat
*
* @create 2022-11-25 19:32
*/
public class DateTimeTest {
/**
* SimpleDateFormat的使用:SimpleDateFormat是对日期Date类的格式化和解析
*
* 1、两个操作:格式化和解析
* 格式化:日期----->字符串
* 解析:格式化的逆过程:字符串---->日期
*
* 2、SimpleDateFormat的实例化
*
*/
@Test
public void test1() throws ParseException {
//实例化SimpleDateFormat:使用默认构造器
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化日期 java.util.Date
Date date = new Date();
System.out.println(date);
String format = sdf.format(date);
System.out.println(format);
//解析:格式化的逆过程:字符串--->日期
String str="22-11-25 下午7:42";
Date parse = sdf.parse(str);
System.out.println(parse);
System.out.println("************按指定的方式格式化和解析:带参数的构造器*******************");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化
String format1 = sdf1.format(date);
System.out.println(format1);//2022-11-25 08:40:43
//解析:要求字符串必须是SimpleDateFormat识别的格式(通过构造器参数体现)
Date parse1 = sdf1.parse("2022-11-25 08:36:46");
System.out.println(parse1);
}
}
运行结果:
java.util.Calendar(日历)类
Calendar是一个抽象基类(不能被实例化),主用用于完成日期字段之间相互操作的功能。
获取Calendar实例的方法
- 使用其静态方法getInstance()
- 创建Calendar的子类(GregorianCalendar)的构造器。
Calandar类的常用方法
- 一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、 MINUTE、SECOND
- public void set(int field,int value)//该方法没有返回值,直接在原有字符串上进行修改
- public void add(int field,int amount)//该方法没有返回值,直接在原有字符串上进行修改
- public final Date getTime()
- public final void setTime(Date date)
注意:
- 获取月份时:一月是0,二月是1,以此类推,12月是11
- 获取星期时:周日是1,周二是2 , 以此类推,周六是7
import org.junit.Test;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateTimeTest {
/**
* 日历类(抽象类)的使用
*/
@Test
public void testCalender(){
//一、实例化
//方式一:创建子类GregorianCalendar的构造器
GregorianCalendar g=new GregorianCalendar();
//set
g.set(2022,11,28);
System.out.println(g.getTime());
//方式二:调用其静态方法getInstance()
Calendar calender = Calendar.getInstance();
//二、常用方法
//get()
int i = calender.get(Calendar.DAY_OF_MONTH);
System.out.println(i);
//set()
calender.set(Calendar.DAY_OF_MONTH,27);
int i1 = calender.get(Calendar.DAY_OF_MONTH);
System.out.println(i1);
//add()
calender.add(Calendar.DAY_OF_MONTH,-1);
int i2 = calender.get(Calendar.DAY_OF_MONTH);
System.out.println(i2);
//getTime():将Calender类转换为Date类
Date date = calender.getTime();
System.out.println(date);
//setTime():将Date类转换为Calender类
Date date1 = new Date();
calender.setTime(date1);
int i3 = calender.get(Calendar.DAY_OF_MONTH);
System.out.println(i3);
}
}
运行结果