文章目录
- 第一代日期类 Date
- 常用构造方法
- SimpleDateFormat 日期格式化类
- 日期转字符串(String -> Date)
- 字符串转日期 (String->Date)
- 第二代日期类 Calendar
- 常用字段与如何得到实例对象
- 相关 API
- 第三代日期类(LocalDate\TIme)
- 日期,时间,日期时间
- 日期时间格式化(DateTimeFormatter)
- 时间戳
- 计算时间(Time)对象间隔(Duration)
- 计算日期(Date)对象间隔 (Period)
- 日期(Date)矫正器(TemporalAdjusters)
第一代日期类 Date
常用构造方法
第一种:Date()
第二种:Date(long 毫秒)
public class Main {
public static void main(String[] args) throws ParseException {
//默认国外形式
Date date = new Date();
System.out.println(date);
//创建了一个代表从1970年1月1日00:00:00 GMT开始后的1000毫秒的日期和时间。
//但是输出 toString 的时候它会显示当前系统所在时区的时间。
//因此,如果你的系统位于东八区(例如中国标准时间),那么输出将会是 "08:00:00"
Date date1 = new Date(1000);
System.out.println(date1);
}
}
1000 是 一秒,1000 * 60 就是 60秒,1000 * 60 * 10 就是 10分钟
SimpleDateFormat 日期格式化类
日期转字符串(String -> Date)
用 String format(Date date) 方法转成字符串
public class Main {
public static void main(String[] args) throws ParseException {
Date date = new Date();
//y:年份,M:年中月份,d:月中日期,F:星期, H:一天中的小时,m:小时中的分钟
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 星期F HH:mm");
//转成字符串
String date1 = sdf.format(date);
//输出2024-06-28 星期 4 22:42
System.out.println(date1);
}
}
字符串转日期 (String->Date)
用 Date parse(String source) 转成 Date
public class Main {
public static void main(String[] args) throws ParseException {
String data = "2024-6-28 星期5 22:49";
//格式和上面对不上会报 parseException 异常
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 星期F HH:mm");
Date date = sdf.parse(data);
System.out.println(data);
}
}
格式和上面对不上会报 parseException 异常
第二代日期类 Calendar
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR, MONTH, DAY_OF_MONTH, HOUR 等 日期字段 之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法
常用字段与如何得到实例对象
Calender 没有专门的格式化方法,需要程序员自己组合
public class Main {
public static void main(String[] args) throws ParseException {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
//底层是这样的:public static final int YEAR = 1;
int year = calendar.get(1);
int year2 = calendar.get(Calendar.YEAR);
System.out.println(year);
System.out.println(year2);
}
}
相关 API
public class Main {
public static void main(String[] args) throws ParseException {
Calendar calendar = Calendar.getInstance();
//把年设置成 2004
calendar.set(Calendar.YEAR, 2004);
System.out.println(calendar.get(Calendar.YEAR));
//加一年
calendar.add(Calendar.YEAR, -1);
System.out.println(calendar.get(Calendar.YEAR));
//关联日期
String strDate = "2008-05-20 15:30:30";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(strDate);
calendar.setTime(date);
System.out.println(calendar.get(Calendar.YEAR));
}
}
第三代日期类(LocalDate\TIme)
JDK 8 加入的
LocalDate (日期/年月日),LocalTime (时间/时分秒),LocalDateTime (日期时间)
老日期类,线程不安全, 新的支持线程安全,建议直接用这个就行
日期,时间,日期时间
public class Main {
public static void main(String[] args) throws ParseException {
//获取当前日期
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
//获取指定日期时间
LocalDateTime ldt2 = LocalDateTime.of(2024,6,29,10,10);
System.out.println(ldt);
//加减日期
ldt2 = ldt2.plusYears(2).plusYears(-1);
System.out.println(ldt2);
//获取年
int year = ldt2.getYear();
System.out.println(year);
}
}
日期时间格式化(DateTimeFormatter)
public class Main {
public static void main(String[] args) throws ParseException {
//LocalDateTime -> String
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String s = dtf.format(localDateTime);
System.out.println(s);
//String -> LocalDateTime
String date = "2024-06-29";
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//格式不对会抛 parse 异常
LocalDate localDate = LocalDate.parse(date, dtf2);
System.out.println(localDate);
}
}
如果是 LocalDateTime 必须要包含时间和日期
时间戳
时间戳:1970年1月1日零时零分零秒,到系统当前时间的总毫秒数
public class Main {
public static void main(String[] args) throws ParseException {
//获取系统当前时间(UTC:全球标准时间)
Instant instant = Instant.now();
//获取时间戳
long cuo = instant.toEpochMilli();
System.out.println(cuo);
}
}
计算时间(Time)对象间隔(Duration)
public class Main {
public static void main(String[] args) throws ParseException {
LocalDateTime time1 = LocalDateTime.of(2024, 6,29,8,8);
LocalDateTime time2 = LocalDateTime.of(2023, 5,27,8,8);
//两时间对象相差对少天
//后面 - 前面
Duration duration = Duration.between( time2,time1);
System.out.println(duration.toDays());
//两时间相差多少天
System.out.println(duration.toHours());
}
}
计算日期(Date)对象间隔 (Period)
public class Main {
public static void main(String[] args) throws ParseException {
LocalDate localDate1= LocalDate.of(2007, 7,7);
LocalDate localDate2 = LocalDate.of(2008, 7,7);
Period between = Period.between(localDate1, localDate2);
//相差年数
System.out.println(between.getYears());
}
}
日期(Date)矫正器(TemporalAdjusters)
public class Main {
public static void main(String[] args) throws ParseException {
//获取系统当前时间
LocalDateTime now = LocalDateTime.now();
//矫正时间
LocalDateTime localDateTime = now.with(TemporalAdjusters.lastDayOfMonth());
System.out.println(localDateTime);
}
}