JDK8 之前日期时间 API
MYsql 时间类型
SimpleDateFormat
1 格式化:日期 —>字符串
sdf.format():
package stringtest;
import java.text.SimpleDateFormat;
import java.util.Date;
public class test02 {
public static void main(String[] args) {
//实例化SimpleDateFormat:使用默认的构造器
SimpleDateFormat sdf01 = new SimpleDateFormat();
//指定格式
SimpleDateFormat sdf02 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化:日期 --->字符串
Date date = new Date();
System.out.println(date);
String format01 = sdf01.format(date);
String format02 = sdf02.format(date);
System.out.println("默认格式 "+format01);
System.out.println("指定格式 "+format02);
}
}
2 解析:格式化的逆过程,字符串 —> 日期
sdf1.parse()
package stringtest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class test02 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
//否则,抛异常
Date date2 = sdf1.parse("2020-02-18 11:48:27");
System.out.println(date2);
}
}
练习一:字符串"2020-09-08"转换为java.sql.Date
@Test
public void testExer() throws ParseException {
String birth = "2020-09-08";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf1.parse(birth);
java.sql.Date birthDate = new java.sql.Date(date.getTime());
System.out.println(birthDate);
}
Calendar日历类 (抽象类)
注意:
案例1
import org.junit.Test;
import java.util.Calendar;
import java.util.Date;
public class Test01 {
@Test
public void testCalendar(){
System.out.println("今天是2021.07.14");
//1.实例化
//方式一:创建其子类(GregorianCalendar)的对象
//方式二:调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance();
// System.out.println(calendar.getClass());
//2.常用方法
//get()
int days = calendar.get(Calendar.DAY_OF_MONTH); //14
System.out.println(days);
System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //195
//set()
//calendar可变性
calendar.set(Calendar.DAY_OF_MONTH,22); //22
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days); //22
//add()
calendar.add(Calendar.DAY_OF_MONTH,-3); //22-3=19
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
//getTime():日历类---> Date
Date date = calendar.getTime(); //Mon Jul 19 20:45:05 CST 2021
System.out.println(date);
//setTime():Date ---> 日历类
Date date1 = new Date();
calendar.setTime(date1);
days = calendar.get(Calendar.DAY_OF_MONTH); //14
System.out.println(days);
}
}
案例2
Calendar的常用属性
Calendar的常用方法
案例3
@Test
public void testCalendar(){
System.out.println("----------------获取当前的日历时间------");
// 获取当前的日历时间
Calendar c = Calendar.getInstance();
// 获取年
int year = c.get(Calendar.YEAR);
// 获取月
int month = c.get(Calendar.MONTH);
// 获取日
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + (month + 1) + "月" + date + "日");
// 5年后的10天前
System.out.println("----------------5年后的10天前------");
c.add(Calendar.YEAR, 5);
c.add(Calendar.DATE, -10);
// 获取年
year = c.get(Calendar.YEAR);
// 获取月
month = c.get(Calendar.MONTH);
// 获取日
date = c.get(Calendar.DATE);
System.out.println(year + "年" + (month + 1) + "月" + date + "日");
System.out.println("----------------设置2011年12月11日------");
c.set(2011, 11, 11);
// 获取年
year = c.get(Calendar.YEAR);
// 获取月
month = c.get(Calendar.MONTH);
// 获取日
date = c.get(Calendar.DATE);
System.out.println(year + "年" + (month + 1) + "月" + date + "日");
}
求指定天数前的日期
自定义方法 Calendar
@Test
public void test01() throws Exception {
String date="2021-07-14";
String dayBefore = getDayBefore(date, 10);
System.out.println(dayBefore);
}
private String getDayBefore(String strDay,int dayNum) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(strDay);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
calendar.add(Calendar.DATE,-dayNum);
String beforeDay=sdf.format(calendar.getTime());
return beforeDay;
}
用apache下的DateUtils
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
@Test
public void test02() throws Exception {
String date="2021-07-15";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(date);
//用apache下的DateUtils转化
Date addDays = DateUtils.addDays(date1, -5);
System.out.println(sdf.format(addDays));
}
比较日期的大小的几种方法
- 用compareTo()方法:
- 直接用Date自带方法before()和after()比较
- getTime()方法 date格式换成毫秒值 比较毫秒值大小
@Test
public void test03() throws Exception {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH-mm-ss");
String time1= "1996-10-24 23-59-59";
String time2= "2018-03-29 23-59-59";
Date date1 = simpleDateFormat.parse(time1);
Date date2 = simpleDateFormat.parse(time2);
//1.使用Date的compareTo()方法,大于、等于、小于分别返回1、0、-1
System.out.println(date1.compareTo(date2));
//2.使用时间戳(指的是从1970年1月1日起到该日期的毫秒数)直接比较大小
System.out.println(date1.getTime() > date2.getTime());
//3.使用Date的before()、after()方法
System.out.println(date1.before(date2));//如果前者比后者小返回true,否则为false
System.out.println(date1.after(date2));//如果前者比后者大返回true,否则为false
}