Java常用类(6)----获取时间类
java.text.SimpleDateFormat类
- Date类的API不易于国际化,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类
- 它允许进行 格式化:日期->文本、 解析:文本->日期
- 格式化(日期转化为字符串):
- SimpleDateFormat():默认的模式和语言环境创建对象
- public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用
- public String format(Date date):方法格式化时间对象date
- 解析(格式化的逆过程):
- public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期
- 代码测试
public class DateTimeTest2 {
/*
* jdk8之前的日期时间的API测试
* 1.System类中currentTimeMillis();
* 2.java.util.Date和子类java.sql.Date
* 3.SimpleDateFormat
* 4.Calendar
*
*
*
* */
@Test
public void testSimpleDateFormat(){
//实例化:使用默认构造器
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化
Date date = new Date();
System.out.println(date);//Thu Jan 27 21:32:44 CST 2022
String format = sdf.format(date);
System.out.println(format);//22-1-27 下午9:32
//解析
String str1="22-1-26 下午9:37";//默认格式
Date date1 = sdf.parse(str1);
System.out.println(date1);
//按照指定方式格式化
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//使用想要的格式
String date2 = sdf1.format(date);
System.out.println(date2);//2022-01-27 09:45:45
}
}
解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),否则,抛异常
- 字符串“2020-09-08”转换为java.sql.Date
public void testExer() throws ParseException {
String birth="2020-09-08";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf1.parse(birth);
System.out.println(date);
java.sql.Date birthDate=new java.sql.Date(date.getTime());
System.out.println(birthDate);
}
java.util.Calendar类
- Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能
- 获取Calendar实例的方法
- 使用Calendar.getInstance()方法
- 调用它的子类GregorianCalendar的构造器
- 一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。
- 注意:
- 获取月份时:一月是0,二月是1,以此类推,12月是11
- 获取星期时:周日是1,周二是2,。。。周六是7
- 常用方法:
- get()
- set()
- getTime()
- setTime()
- 代码测试
public class DateTimeCalendar {
@Test
public void CalendarTest(){
//1.实例化
Calendar calendar = Calendar.getInstance();//调用其静态方法
//2.常用方法
//get():获取一些属性
int days = calendar.get(Calendar.DAY_OF_MONTH);//这一个月的第几天
System.out.println(days);
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//5,周四,但是从周日开始算,所以是第五天
//set():设置属性,修改属性
calendar.set(Calendar.DAY_OF_MONTH,22);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);//22
//add():增加
calendar.add(Calendar.DAY_OF_MONTH,3);
int day2 = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day2);//25:加三天
//getTime():日历类--->Date
Date date = calendar.getTime();
System.out.println(date);//Tue Jan 25 22:14:20 CST 2022
//setTime():Date--->日历类
Date date1 = new Date();
calendar.setTime(date1);
int day3 = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day3);//27
}
}
- 说明:
jdk8之前的日期时间的API测试
- 1.System类中currentTimeMillis();
- 2.java.util.Date和子类java.sql.Date
- 3.SimpleDateFormat
- 4.Calendar
Jdk8:java.time
- Java8吸收了Joda-Time的精华,以一个新的开始为Java创建优秀的API。新的java.time中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZoneDateTime)和持续时间(Duration)的类
- 三个类的使用
- LocalDate
- LocalTime
- LocalDateTime(相较于其他两个,使用频率要高)
- 实例化:
now()
of()
//实例化 now():获取当前的日期、时间、日期加时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime now = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(now);
//of():设置指定的年月时分秒,没有偏移量
LocalDateTime localDateTime = LocalDateTime.of(2022, 1, 27, 22, 44, 45);
System.out.println(localDateTime);//2022-01-27T22:44:45
-
方法的使用
1)getXXX():获取一些属性
//getXXX() System.out.println(localDateTime.getDayOfMonth()); System.out.println(localDateTime.getDayOfWeek()); System.out.println(localDateTime.getDayOfYear()); System.out.println(localDateTime.getMonthValue());
-
withXXX():设置一些属性
//体现不可变性 LocalDate localDate1 = localDate.withDayOfMonth(22); System.out.println(localDate);//不变,本地时间不会改变,比calendar靠谱 System.out.println(localDate1);//2022-01-22,修改后的
3)plusxxx(),minusxxx():增加减少
/plusxxx(),minusxxx():增加减少 LocalDateTime localDateTime1 = localDateTime.plusDays(3); System.out.println(localDateTime);//不可变性 System.out.println(localDateTime1);//2022-01-30T22:44:45,增加三天 LocalDateTime localDateTime2 = localDateTime.minusDays(7); System.out.println(localDateTime2);