package cn.itcast.Demo20.日期处理;
/**
* JAVA8所有日期和时间API都是不可变的并且线程安全的,而现有的Date和 Calendar API中的java.uil.Date和SimpleDateFormat是非线程安全的
*/
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.TimeZone;
public class DateTest {
public static void main(String[] args) {
DateTest dateTest = new DateTest();
dateTest.getCurrentDate();
dateTest.getDetailDate();
dateTest.handleSpecialDate();
dateTest.compareDate();
dateTest.cycleDate();
dateTest.getCurrentTime();
dateTest.plusHours();
dateTest.nextWeek();
dateTest.clock();
dateTest.isBeforeOrIsAfter();
dateTest.getZoneTime();
dateTest.checkCardExpiry();
dateTest.calcDateDays();
dateTest.formatDate();
}
public void getCurrentDate(){ // 获取当前的日期,没有时间,LocalDate类代替Date类
LocalDate today = LocalDate.now();
System.out.println(today);
Date date = new Date();
System.out.println(date);
}
public void getDetailDate(){ // 获取年、月、日,LocalDate类代替Calender类
LocalDate today = LocalDate.now();
int year = today.getYear();
int month = today.getMonthValue();
int day = today.getDayOfMonth();
System.out.println(year+" "+month+" "+day);
}
public void handleSpecialDate(){ // 获取日期实例,代替老API的年度起始于1900,月份从0开始
LocalDate dateOfBirth = LocalDate.of(2021,10,11);
System.out.println(dateOfBirth);
}
public void compareDate(){ // 判断两个日期是否相等,重载了equals方法,如果日期是字符型的,需要先解析成日期对象再作判断
LocalDate today = LocalDate.now();
LocalDate date1 = LocalDate.of(2021,10,11);
if(date1.equals(today)){
System.out.println("输入的日期是当天日期!");
}
}
public void cycleDate(){ // MonthDay类检查像生日这种周期性事件
LocalDate today = LocalDate.now();
LocalDate dateOfBirth = LocalDate.of(1993,12,05);
// MonthDay类组合了月份和日,去掉了年,类似的还有YearMonth类,都是不可变并且线程安全的值类型
MonthDay birthday = MonthDay.of(dateOfBirth.getMonthValue(),dateOfBirth.getDayOfMonth());
MonthDay currentMonthDay = MonthDay.from(today);
if(currentMonthDay.equals(birthday)){
System.out.println("今天是你的生日!");
}else{
System.out.println("今天不是你的生日!");
}
}
public void checkCardExpiry(){ // YearMonth类处理特定的日期,像信用卡到期日
// currentYearMonth.lengthOfMonth()显示当月的天数
YearMonth currentYearMonth = YearMonth.now();
System.out.println(currentYearMonth+":"+currentYearMonth.lengthOfMonth());
// 设置年月
YearMonth creditCardExpiry = YearMonth.of(2028,Month.FEBRUARY);
System.out.println(creditCardExpiry+":"+creditCardExpiry.lengthOfMonth());
}
public void getCurrentTime(){ // 获取当前时间,没有日期,LocalTime类代替Date类,默认格式hh:mm:ss:nnn
LocalTime time = LocalTime.now();
System.out.println(time);
}
public void plusHours(){ // 在现有的时间上增加小时,用plusHours()代替add()方法,返回一个全新的LocalTime实例
LocalTime time = LocalTime.now();
LocalTime newTime = time.plusHours(2);
System.out.println("当前时间:"+time);
System.out.println("增加了2小时后的时间:"+newTime);
}
public void nextWeek(){ // 计算多少日期后或前的日期,用plus()方法增加或minus()方法减少天、周、月,ChronoUnit类声明了时间单位
LocalDate today = LocalDate.now();
LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
LocalDate previousYear = today.minus(1, ChronoUnit.YEARS);
System.out.println("当前日期:"+today);
System.out.println("一周后的日期"+nextWeek);
System.out.println("一年前的日期"+previousYear);
}
public void clock(){ // Clock时钟类用于获取当时的时间戳,或当前时区下的日期时间信息。
// 以前用到System.currentTimeInMillis()和TimeZone.getDefault()的地方都可用Clock类替换
System.out.println(System.currentTimeMillis());
System.out.println(TimeZone.getDefault());
// 根据系统时间返回当前时间并设置为UTC
Clock clock = Clock.systemUTC();
System.out.println(clock);
System.out.println("Z时区的时间戳:"+clock.millis());
// 根据系统时钟区域返回时间
Clock defaultClock = Clock.systemDefaultZone();
System.out.println(defaultClock);
System.out.println("当前时区的时间戳:"+defaultClock.millis());
}
public void isBeforeOrIsAfter(){ // 判断日期是早于还是晚于另一个日期
LocalDate today = LocalDate.now();
LocalDate tomorrow = LocalDate.of(2021,10,12);
if (tomorrow.isAfter(today)){
System.out.println("明天要来了!");
}
LocalDate yesterday = today.minus(1,ChronoUnit.DAYS);
if (yesterday.isBefore(today)){
System.out.println("昨天过去了");
}
}
public void getZoneTime(){ // 处理时区,ZoneId来处理特定时区,ZoneDaeTime来表示某时区下的时间
ZoneId america = ZoneId.of("America/New_York");
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
ZonedDateTime dateTimeInNewYork = ZonedDateTime.of(localDateTime, america);
System.out.println("现在的日期和时间在特定的时区:"+dateTimeInNewYork);
}
public void calcDateDays(){ // Period类计算两个日期之间的天数和月数
LocalDate today = LocalDate.now();
LocalDate java8release = LocalDate.of(2018, Month.MAY,14);
Period period = Period.between(today, java8release);
System.out.println("两个日期相隔多少月:"+period.getMonths());
System.out.println("两个日期相隔多少天:"+period.getDays());
}
public void getTimestamp(){ // Instant类获取当前的时间戳
Instant timestamp = Instant.now();
System.out.println(timestamp);
}
public void formatDate(){ // 使用预定义的格式化工具去解析或格式化工具
String day = "20180210";
LocalDate formatted = LocalDate.parse(day, DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(formatted);
}
}
JAVA之日期处理
最新推荐文章于 2023-04-08 16:22:39 发布