Java日期处理
Java8之前的传统日期API
Date转换成字符串
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 14:43
*/
public class Demo {
public static void main(String[] args) {
//创建Date类,构造的时候填入当前的日期
Date date = new Date();
System.out.println(date);
//获得秒
final long time = date.getTime();
System.out.println(time);
//将Date转换成更好识别的日期字符串
final SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E a");
final String format1 = format.format(date);
System.out.println(format1);
//将秒转换成更好识别的日期字符串
final String format2 = format.format(time);
System.out.println(format2);
}
}
字符串解析成Date对象
//将字符串的时间解析成日期对象
String str = "2024-03-07 15:46:50";
final SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
final Date parse = format3.parse(str);
System.out.println(parse);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar对象
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 14:43
*/
public class Demo {
public static void main(String[] args) {
final Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
//输出今天时今年的第几天
final int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println(dayOfYear);
//修改年份
calendar.set(Calendar.YEAR, 2025);
//获取输出年份
final int year = calendar.get(Calendar.YEAR);
System.out.println(year);
}
}
Java开始新增的日期和时间

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 14:43
*/
public class Demo {
public static void main(String[] args) {
final Date date = new Date();
final int year = date.getYear();
//1.设计不合理,使用不方便
System.out.println(year + 1900); //这里得到的年份还要-1900
Calendar cal = Calendar.getInstance();
final int month = cal.get(Calendar.MONTH); //这里得到月份还要自己记忆Calendar.MONTH
System.out.println(month);
//2.传统的日期都是可变的对象,修改后丢失原始的信息
//3.传统的日期是线程不安全的
}
}

分类

LocalDate
import java.time.DayOfWeek;
import java.time.LocalDate;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 16:42
*/
public class LocalDateDemo {
public static void main(String[] args) {
//获取本地日期对象(不可变对象)
final LocalDate now = LocalDate.now();
//1.获取对象中的信息
System.out.println(now); //2024-03-07
final int year = now.getYear();
System.out.println(year); //2024
final int month = now.getMonthValue();
System.out.println(month); //3
final int day = now.getDayOfMonth();
System.out.println(day); //7
final int dayOfYear = now.getDayOfYear();
System.out.println(dayOfYear);//67
final DayOfWeek dayOfWeek = now.getDayOfWeek();
System.out.println(dayOfWeek); //THURSDAY
//2.直接修改某个信息
final LocalDate now1 = now.withYear(2099);
final LocalDate now2 = now.withMonth(12);
System.out.println(now); //2024-03-07
System.out.println(now1); //2099-03-07
System.out.println(now2); //2024-12-07
final LocalDate now3 = now.plusYears(2); //2026-03-07
System.out.println(now3);
final LocalDate now4 = now.minusYears(2);
System.out.println(now4); //2022-03-07
final LocalDate now5 = LocalDate.of(2008, 12, 12);
final LocalDate now6 = LocalDate.of(2008, 12, 22);
System.out.println(now5); //2008-12-12
System.out.println(now6); //2008-12-22
System.out.println(now5.equals(now6)); //false
System.out.println(now5.isBefore(now6)); //true
System.out.println(now5.isAfter(now6)); //false
}
}
LocalTime
import java.time.LocalTime;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/7 18:38
*/
public class LocalTimeDemo {
public static void main(String[] args) {
final LocalTime now = LocalTime.now();
System.out.println(now); //18:38:47.606559700
//1.获取事件中的信息
System.out.println(now.getHour()); //时
System.out.println(now.getMinute()); //分
System.out.println(now.getSecond()); //秒
System.out.println(now.getNano()); //纳秒
//2.修改时间 withHour,withMinute,withSecond,withNano
//3.加时间 plusHours,plusMinutes,plusSecond,plusNanos
//4.减多少
//...同LocalDate
}
}
LocalDateTime
和LocalDate、LocalDateTime类似
但是LocalDateTime可以分成LocalDate和LocalTime,LocalTime和LocalDate也可以合成LocalDateTime
ZonedId和ZonedDateTime
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Set;
/**
* 时区例子
* @author Pickle
* @version V1.0
* @date 2024/3/7 18:55
*/
public class ZoneIdDemo {
public static void main(String[] args) {
//时区
final ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId.getId()); //Asia/Shanghai
System.out.println(zoneId.toString()); //Asia/Shanghai
final Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
System.out.println(availableZoneIds);
final ZoneId zoneId1 = ZoneId.of("America/New_York");
System.out.println(zoneId1); //America/
//ZonedDateTime 带时区的时间
final ZonedDateTime now = ZonedDateTime.now(zoneId1);
System.out.println(now); //2024-03-07T19:46:33.239634900-05:00[America/New_York]
//世界标准时间
final ZonedDateTime now1 = ZonedDateTime.now(Clock.systemUTC());
System.out.println(now1); //2024-03-08T00:49:46.709918600Z
//获取系统默认的时间
final ZonedDateTime now2 = ZonedDateTime.now();
System.out.println(now2); //2024-03-08T08:51:05.539210500+08:00[Asia/Shanghai]
}
}
Instant
import java.time.Instant;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/8 8:56
*/
public class InstantDemo {
public static void main(String[] args) {
//创建Instant对象
Instant now = Instant.now();
//获取总秒数
final long epochSecond = now.getEpochSecond();
System.out.println(epochSecond); //1709859671
//不够一秒的纳秒数
System.out.println(now.getNano()); //194475000
System.out.println(now); //2024-03-08T01:01:11.194475Z
//Instant的作用
//1、代码的性能分析
//2、记录用户的操作时间
//3、Instant可以获得从1970-01-01T00:00:00Z经过的秒数,LocalTime则不能实现这个功能
}
}
DateTimeFormatter
Java8中DateTimeFormatter用来代替SimpleDateFormat,原因是SimpleDateFormat是线程不安全的
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/8 9:08
*/
public class DateTimeFormatterDemo {
public static void main(String[] args) {
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
final LocalDateTime now = LocalDateTime.now();
//正向格式化
System.out.println(dateTimeFormatter.format(now)); //2024年03月08日 09:38:45
//反向格式化
final String format = now.format(dateTimeFormatter);
System.out.println(format); //2024年03月08日 09:38:45
//解析时间
String dateStr = "2029年12月12日 12:12:11";
final LocalDateTime parse = LocalDateTime.parse(dateStr, dateTimeFormatter);
System.out.println(parse); //2029-12-12T12:12:11
}
}
Period
用于计算时间间隔(年月日)
import java.time.LocalDate;
import java.time.Period;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/8 9:49
*/
public class PeriodDemo {
public static void main(String[] args) {
final LocalDate start = LocalDate.of(2029, 4, 10);
final LocalDate end = LocalDate.of(2029, 8, 15);
final Period period = Period.between(start, end);
//底层就是年、月、日对应相减
System.out.println(period.getYears()); //0
System.out.println(period.getMonths()); //4
System.out.println(period.getDays()); //5
}
}
Duration
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.Temporal;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/8 9:57
*/
public class DurationDemo {
public static void main(String[] args) {
//LocalDateTime实现了Temporal接口
final LocalDateTime start = LocalDateTime.of(2023,12,24,9,0);
final LocalDateTime end = LocalDateTime.of(2023,12,24,9,3);
final Duration between = Duration.between(start, end);
//间隔多少天
System.out.println(between.toDays()); //0
//间隔多少小时
System.out.println(between.toHours()); //0
//间隔多少分钟
System.out.println(between.toMinutes()); //3
//间隔多少秒
System.out.println(between.toSeconds()); //180
//间隔多少毫秒
System.out.println(between.toMillis()); //180000
//间隔多少纳秒
System.out.println(between.toNanos()); //180000000000
}
}
浙公网安备 33010602011771号