JAVA之日期处理

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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值