日期与时间
Date
java.util.Date类表示时间,JDK1.1之后推荐使用 java.util.Calendar类;
java.util.Date类中很多构造方法和方法已经过时(Deprecated),不推荐使用,
|
Calendar
JDK1.1版本开始,增加Calendar类,建议使用Calendar类代替Date类;
Calendar是抽象类,不能直接使用new创建对象;
|
SimpleDateFormat中定义了对时间进行格式化的方法;该类继承了抽象父类DateFormat,某些方法在父类中定义,查阅API文档时注意;
private static void dateToString() {
Calendar calendar = Calendar.getInstance();//获取日历对象
calendar.set(Calendar.MONTH, 11);
Date date = calendar.getTime();//将日历对象用getTime方法转换成Date对象
//自定义格式
//String pattern="yyyy年MM月dd日 HH时mm分ss秒";
String pattern = "yy-M-d H:m:s";
//构造方法传入格式参数
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String format = sdf.format(date);//使用format格式化
System.out.println(format);
//System.out.println(sdf.format(cal.getTime()));//简写
}
/*22-12-9 20:4:5*/
yyyy:年 MM:月 dd:日 hh:1~12小时制(1-12) HH:24小时制(0-23) mm:分 ss:秒 S:毫秒 E:星期几 D:一年中的第几天 F:一月中的第几个星期(会把这个月总共过的天数除以7) w:一年中的第几个星期 W:一月中的第几星期(会根据实际情况来算) a:上下午标识 k:和HH差不多,表示一天24小时制(1-24)。 K:和hh差不多,表示一天12小时制(0-11)。 z:表示时区 |
2、解析时间字符串
在实际编程中,往往一些时间内容都是通过用户输入获得,得到的是字符串,需要解析成日期时间类型进行处理;
SimpleDateFormat类不仅能够格式化时间,还能解析时间字符串;
public static void stringToDate() {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");
String strDate = "2001年2月2日 12时20分30秒300毫秒";
try {
//parse把字符串转为日期Date类型对象,如果格式不匹配抛出转换异常
System.out.println(sdf.parse(strDate));
//把时间戳存储在数据库中
} catch (ParseException e) {
e.printStackTrace();
}
}
/*Fri Feb 02 12:20:30 CST 2001
981087630300*/
import java.time.LocalDate;
public class LocalDateTest {
public static void main(String[] args) {
System.out.println("-----获取LocalDate对象-----");
//now() 获取当前日期的LocalDate对象
LocalDate now=LocalDate.now();
System.out.println(now);
//of() 使用年月日数值生成LocalDate对象
LocalDate localDate=LocalDate.of(2001,2,2);
System.out.println(localDate);
System.out.println("----------get-----------");
System.out.println(localDate.getDayOfMonth());
System.out.println(localDate.getDayOfWeek());
System.out.println(localDate.getDayOfYear());
System.out.println(now.getMonthValue());
System.out.println(now.getMonth());
System.out.println("----------parse--------");
//parse将字符串转换成LocalDate对象
String strLocalDate="2001-02-02";
LocalDate myLocalDate=LocalDate.parse(strLocalDate);
System.out.println(myLocalDate);
}
}
4、LocalTime
LocalDate类只表示日期,JDK8中定义了新类LocalTime用来表示时间
import java.time.LocalTime;
import java.time.temporal.ChronoField;
/**
* ChronoField是java8提供的一个枚举类
* 里面定义了很多表示日历的字段
* 提供基于字段的访问来操纵日期,时间或日期时间,
* 通过实现TemporalField来扩展标准字段集
*/
public class LocalTimeTest {
public static void main(String[] args) {
System.out.println("---获取LocalTime对象---");
//now() 用当前日期生成LocalTime
LocalTime now = LocalTime.now();
System.out.println(now);
//of() 使用指定数字生成LocalTime
LocalTime of = LocalTime.of(11, 2, 35, 231);
System.out.println(of);
System.out.println("------返回各字段值------");
System.out.println(now.getHour());
System.out.println(now.getMinute());
System.out.println(now.getSecond());
System.out.println(now.get(ChronoField.HOUR_OF_DAY));//在标准的24小时数字时钟上观察到的小时
System.out.println(now.get(ChronoField.MINUTE_OF_HOUR));
System.out.println(now.get(ChronoField.SECOND_OF_MINUTE));
System.out.println("----------parse--------");
//parse,参数格式 HH:mm:ss 将字符串转换成LocalTime对象
LocalTime parseLocalTime = LocalTime.parse("12:02:38");
System.out.println(parseLocalTime);
}
}
5、LocalDateTime
LocalDateTime类,同时包含日期与时间
import java.time.LocalDateTime;
public class LocalDateTimeTest {
public static void main(String[] args) {
System.out.println("---获取LocalDateTime对象---");
//now() 当前日期
LocalDateTime now=LocalDateTime.now();
System.out.println(now);
//of() 指定数字 年月日时分秒
LocalDateTime of=LocalDateTime.of(2001,4,25,14,23,45);
System.out.println(of);
System.out.println(now.getDayOfMonth());
System.out.println(now.getHour());
//parse默认格式:yyyy-MM-ddTHH:mm:ss
LocalDateTime parse=LocalDateTime.parse("2001-02-02T12:34:23");
System.out.println(parse);
}
}
6、DateTimeFormatter
对于格式化及解析
//ofPattern静态方法获取DateTimeFormatter对象
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy年MM月dd日HH时mm分ss秒");
//获取localDateTime对象
LocalDateTime now=LocalDateTime.now();
//LocalDate now =LocalDate.now();//只表示日期没有时间,不匹配
//把LocalDateTime LocalDate LocalTime 按照指定格式转换成字符串
//DateTimeFormatter格式要与format参数一致
String format=dtf.format(now);
System.out.println(format);
/*2022年04月10日15时42分52秒*/
7、LocalDate、LocalTime、LocalDateTime
- 使用DateTimeFormatter对象进行格式化
- 使用DateTimeFormatter对象把字符串按照指定的格式转换成时间日期类型对象
-
String pattern1="yyyy/MM/dd"; DateTimeFormatter dtf1=DateTimeFormatter.ofPattern(pattern1); TemporalAccessor parse = LocalDate.parse("2001/02/02",dtf1); System.out.println(parse); String pattern2="yyyy/MM/dd HH:mm:ss"; DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern(pattern2); LocalDateTime localDateTime=LocalDateTime.parse("2002/04/02 14:23:34",dtf2); System.out.println(localDateTime); String pattern3="HH:mm:ss"; DateTimeFormatter dtf3 = DateTimeFormatter.ofPattern(pattern3); LocalTime localTime=LocalTime.parse("14:23:34",dtf3); System.out.println(localTime);