目录
3.3 java.text.SimpleDateFormat
3. JDK8之前:日期时间API
3.1 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)
在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。这里,UTC与GMT含义完全相同。
-
3.2 java.util.Date
表示特定的瞬间,精确到毫秒。
-
构造器:
-
Date():使用无参构造器创建的对象可以获取本地当前时间。
-
Date(long 毫秒数):把该毫秒值换算成日期时间对象
-
-
常用方法
-
getTime(): 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
-
toString(): 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
-
其它很多方法都过时了。
-
-
举例:
package exer1;
import org.junit.Test;
import java.util.Date;
/**
* ClassName:IntelliJ IDEA
* Description:
*
* @Author zyjstart
* @Create:2024/9/28 16:22
*/
public class DateTimeTest {
/**
* Date类的使用
*
* /----java.util.Date
* >两个构造器的使用
* >两个方法的使用:① toString() ② getTime()
*
* /-----java.sql.Date:对应着数据库中的date类型
*/
@Test
public void test1(){
Date date1 = new Date(); // 创建一个基于当前系统时间的Date的实例
System.out.println(date1.toString());
long time = date1.getTime();
System.out.println("对应的毫秒数为:" + time);
Date date2 = new Date(1727511995636L); //创建一个基于指定时间戳的Date的实例
System.out.println(date2.toString());
}
}
运行结果:
3.3 java.text.SimpleDateFormat
-
java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
-
可以进行格式化:日期 --> 文本
-
可以进行解析:文本 --> 日期
-
构造器:
-
SimpleDateFormat() :默认的模式和语言环境创建对象
-
public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象
-
-
格式化:
-
public String format(Date date):方法格式化时间对象date
-
-
解析:
-
public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
-
示例:
package exer1;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* ClassName:IntelliJ IDEA
* Description:
*
* @Author zyjstart
* @Create:2024/9/28 16:46
*/
public class SimpleDateTest {
/**
* SimpleDateFormat类:用于日期时间的格式化和解析
*
* 格式化:日期 -> 字符串
* 解析: 字符串 -> 日期
*/
@Test
public void test3() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(); // 空参构造器,使用默认格式
// 格式化:日期 -> 字符串
Date date1 = new Date();
String strDate = sdf.format(date1);
System.out.println(strDate);
// 解析: 字符串 -> 日期
Date date2 = sdf.parse("24-9-28 下午4:49");
System.out.println(date2);
}
}
运行结果:
3.4 java.util.Calendar(日历)
-
Date类的API大部分被废弃了,替换为Calendar。
-
Calendar
类是一个抽象类,主用用于完成日期字段之间相互操作的功能。 -
获取Calendar实例的方法
-
使用
Calendar.getInstance()
方法 -
调用它的子类GregorianCalendar(公历)的构造器。
-
-
一个Calendar的实例是系统时间的抽象表示,可以修改或获取 YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND等
日历字段
对应的时间值。-
public int get(int field):返回给定日历字段的值
-
public void set(int field,int value) :将给定的日历字段设置为指定的值
-
public void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量
-
public final Date getTime():将Calendar转成Date对象
-
public final void setTime(Date date):使用指定的Date对象重置Calendar的时间
-
-
常用字段
-
注意:
-
获取月份时:一月是0,二月是1,以此类推,12月是11
-
获取星期时:周日是1,周二是2 , 。。。。周六是7
-
-
示例代码:
package exer1;
import org.junit.Test;
import java.util.Calendar;
import java.util.Date;
/**
* ClassName:IntelliJ IDEA
* Description:
*
* @Author zyjstart
* @Create:2024/9/28 18:10
*/
public class CalendarTest {
/**
* Calendar:日历类
* ① 实例化 由于Calendar是一个抽象类,所以我们需要创建其子类的实例,这里我们通过Calendar的静态方法
* getInstance()即可获取
* ② 常用方法:get(int field) / set(int field, xx) / add(int field,xx) / getTime() / setTime()
*/
@Test
public void test(){
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getClass()); // 查看当前对象类是谁
//测试方法
// get(int field)
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//今天是这个月的第几天
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));// 今天是这年的第几天
//set(int field, xx)
calendar.set(Calendar.DAY_OF_MONTH,15); // 将今天是这个月的第几天改为15
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
//add(int field,xx)
calendar.add(Calendar.DAY_OF_MONTH,3); // 在原有的基础上加上3天
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
// getTime() : Calendar --> Date
Date time = calendar.getTime();
System.out.println(time);
// setTime():使用指定的Date重置Calendar
Date date = new Date();
calendar.setTime(date); // 被重置了,下列输出为当前系统,是这个月的多少天
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
}
}
输出示例:
练习
1、如何将一个java.util.Date的实例转换为java.sql.Date的实例
package exer1;
import org.junit.Test;
import java.util.Date;
/**
* ClassName:IntelliJ IDEA
* Description:
*
* @Author zyjstart
* @Create:2024/9/28 18:35
*/
public class Exer01 {
/**
* 练习:如何将一个java.util.Date的实例转换为java.sql.Date的实例
*
*/
@Test
public void test(){
Date date1 = new Date();
java.sql.Date date2 = new java.sql.Date(date1.getTime());
System.out.println(date2);
}
}
运行结果:
2、拓展
将控制台获取的年月日(比如:2022-12-16)的字符串数据,转换为java.sqL.Date的对象 (字符串 --> java.util.Date --> java.sql.Date)
package exer1;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* ClassName:IntelliJ IDEA
* Description:
*
* @Author zyjstart
* @Create:2024/9/28 18:51
*/
public class Exer02 {
/**
* 拓展:
* 将控制台获取的年月日(比如:2022-12-16)的字符串数据,转换为java.sqL.Date的对象
* 字符串 --> java.util.Date --> java.sql.Date
*/
@Test
public void test() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 指定格式
String patter = "2022-12-16";
// 得到java.util.Date的结果,解析:字符串 --> java.util.Date
Date date1 = sdf.parse(patter);
// 转换为java.sql.Date
java.sql.Date date2 = new java.sql.Date(date1.getTime());
System.out.println(date2);
}
}