目录
Date类
- Date类
- Date实例化与日期比较
- Calendar
- 范例:获取当前日期时间
- 范例:日期计算
- 范例:找到8月的最后一天
- SimpleDateFormat
- 范例:日期格式化yyyy-MM-dd HH:mm:ss.SSS
- 范例:字符串转日期时间(String ➡️ Date)
- 数据类型转换表
- LocalDate
- 范例:获取当年的日期时间
- 范例:通过LocalDate获取详细的日期数据
- 范例:判断是否是闰年
- 范例:日期的推算
- 多线程中日期格式化
- 方式一:性能差,容易产生垃圾
- 方式二:多线程会报错
- 方式三:DateTimeFormatter(多线程下推荐)
System.out.println(new Date());
import java.util.Date;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
long datetime = System.currentTimeMillis() - 10000 ; // 得到了一个long数据类型
Date dateA = new Date(datetime) ; // 日期时间数值要小
Date dateB = new Date() ; // 日期时间数值要大
System.out.println(dateA); // long转为Date类型
System.out.println(dateB);
System.out.println("【两个日期之间所差的毫秒数】" + (dateB.getTime() - dateA.getTime()));
System.out.println("【先后关系】AFTER:" + (dateA.after(dateB)));
System.out.println("【先后关系】BEFORE:" + (dateA.before(dateB)));
}
}
Calendar
package com.yootk.demo;
import java.util.Calendar;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Calendar calendar = Calendar.getInstance(); // 获取对象实例
System.out.println(String.format("当前的日期时间格式:%s-%s-%s %s:%s:%s",
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
calendar.get(Calendar.DAY_OF_MONTH),
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND)));
}
}
import java.util.Calendar;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Calendar calendar = Calendar.getInstance(); // 获取对象实例
calendar.add(Calendar.YEAR, 30); // 30年之后
calendar.add(Calendar.MONTH, 6); // 计算半年之后的日期
System.out.println(String.format("当前的日期时间格式:%s-%s-%s %s:%s:%s",
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
calendar.get(Calendar.DAY_OF_MONTH),
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND)));
}
}
import java.util.Calendar;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Calendar calendar = Calendar.getInstance(); // 获取对象实例
calendar.set(calendar.get(Calendar.YEAR), 8, 1); // 通过9月计算8月最后一天
calendar.add(Calendar.DATE, -1); // 9月的第一天减1
System.out.println(String.format("当前的日期时间格式:%s-%s-%s %s:%s:%s",
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
calendar.get(Calendar.DAY_OF_MONTH),
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND)));
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
Date date = new Date() ;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ; // 实例化转换类对象
String str = sdf.format(date) ; // 将日期时间转为字符串
System.out.println(str);
}
}
范例:字符串转日期时间(String ➡️ Date)
package com.yootk.demo;
import java.text.SimpleDateFormat;
import java.util.Date;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
String str = "2020-02-16 15:54:36.873" ; // 所给出的日期时间字符串的组成要求符合于匹配结构
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ; // 实例化转换类对象
Date date = sdf.parse(str) ; // 将字符串转为日期时间
System.out.println(date);
}
}
数据类型转换表
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
LocalDate localDate = LocalDate.now() ; // 获得当前的日期
LocalTime localTime = LocalTime.now() ; // 获得当前的时间
LocalDateTime localDateTime = LocalDateTime.now() ; // 获得当前的日期时间
System.out.println("【LocalDate实例化对象输出】" + localDate);
System.out.println("【LocalTime实例化对象输出】" + localTime);
System.out.println("【LocalDateTime实例化对象输出】" + localDateTime);
}
}
范例:通过LocalDate获取详细的日期数据
import java.time.LocalDate;
import java.time.temporal.ChronoField;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
LocalDate today = LocalDate.now(); // 获得当前的日期
System.out.println(String.format("【当前日期】%s-%s-%s", today.getYear(), today.getMonthValue(), today.getDayOfMonth()));
System.out.println("【获取一周时间数】" + today.getDayOfWeek().getValue());
System.out.println("【今天所处一月的周数】" + today.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
System.out.println("【今天所处一年的周数】" + today.get(ChronoField.ALIGNED_WEEK_OF_YEAR));
System.out.println("【今天所处一年的第几天】" + today.getDayOfYear());
}
}
范例:判断是否是闰年
import java.time.LocalDate;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
LocalDate localDate = LocalDate.parse("1988-09-15") ; // 操作特定日期
System.out.println("【闰年判断】" + localDate.isLeapYear());
System.out.println("【所处的一周时间数】" + localDate.getDayOfWeek());
}
}
范例:日期的推算
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
LocalDate localDate = LocalDate.parse("1988-09-15"); // 操作特定日期
System.out.println("【所在月的第一天】" + localDate.with(TemporalAdjusters.firstDayOfMonth()));
System.out.println("【所在月的第二天】" + localDate.withDayOfMonth(2));
System.out.println("【所在月的最后一天】" + localDate.with(TemporalAdjusters.lastDayOfMonth()));
System.out.println("【300年后的日期】" + localDate.plusYears(300));
System.out.println("【300月后的日期】" + localDate.plusMonths(300));
System.out.println("【日期所处月的第一个周一】" + localDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
System.out.println("【日期所处年的第一个周一】" + LocalDate.parse("1988-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
}
}
多线程中日期格式化
方式一:性能差,容易产生垃圾
package com.yootk.demo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
for (int x = 0; x {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try { // 单一线程下的实现的字符串转日期处理
System.out.println("【" + Thread.currentThread().getName() + "】" + sdf.parse("1998-02-17 21:15:32"));
} catch (ParseException e) {
e.printStackTrace();
}
}, "SDF转换线程 - " + x).start();
}
}
}
不会出现任何错误,但是SimpleDateFormat sdf 重复了,会导致垃圾的产生。
方式二:多线程会报错import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
// 日期时间的格式化类对象,定义SimpleDateFormat类中的匹配日期时间字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") ;
ZoneId zoneId = ZoneId.systemDefault() ; // 获得当前的时区ID
for (int x = 0; x {
LocalDateTime localDateTime = LocalDateTime.parse("1998-02-17 21:15:32", formatter) ;
Instant instant = localDateTime.atZone(zoneId).toInstant();// 获得一个当前时区的实例
Date date = Date.from(instant) ; // 字符串转为日期
System.out.println("【" + Thread.currentThread().getName() + "】" + date);
}, "SDF转换线程 - " + x).start();
}
}
}
日期时间:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
// 日期时间的格式化类对象,定义SimpleDateFormat类中的匹配日期时间字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") ;
ZoneId zoneId = ZoneId.systemDefault() ; // 获得当前的时区ID
for (int x = 0; x {
LocalDateTime localDateTime = LocalDateTime.parse("1998-02-17 21:15:32", formatter) ;
Instant instant = localDateTime.atZone(zoneId).toInstant();// 获得一个当前时区的实例
Date date = Date.from(instant) ; // 字符串转为日期
System.out.println("【" + Thread.currentThread().getName() + "】" + date);
}, "SDF转换线程 - " + x).start();
}
}
}
日期:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
// 日期时间的格式化类对象,定义SimpleDateFormat类中的匹配日期时间字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") ;
ZoneId zoneId = ZoneId.systemDefault() ; // 获得当前的时区ID
for (int x = 0; x {
LocalDate localDate = LocalDate.parse("1998-02-17", formatter) ;
Instant instant = localDate.atStartOfDay().atZone(zoneId).toInstant() ; // 获取当前时区实例
Date date = Date.from(instant) ; // 字符串转为日期
System.out.println("【" + Thread.currentThread().getName() + "】" + date);
}, "SDF转换线程 - " + x).start();
}
}
}