目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

Date-Time、DateTimeFormatter

时区

 整个地球分为 ⼆ ⼗四时区,每个时区都有 ⾃ ⼰的本地时间。为了统 ⼀,使 ⽤ ⼀个统 ⼀的时间,称为全球标准时间(UTC, Universal Time Coordinated)。
 TC 与格林尼治平均时(GMT, Greenwich Mean Time,也翻译成:格林威治标准时间)差不多一样。
CST(北京时间),北京时间,China Standard Time,中国标准时间。在时区划分上,属东八区,⽐协调世界时早 8⼩时,记为 UTC+8。
时间戳:⾃ 1970 年 1 ⽉ 1 ⽇(08:00:00 GMT)⾄当前时间的总秒数,它也被称为 Unix 时 间戳(Unix Timestamp),⼴泛的运 ⽤在知识产权保护、 合同签字、 ⾦融帐务、 电 ⼦报价投 标、 股票交易等 ⽅ ⾯。
格式多种:2050-10-31 10:11:11、 2050/10/31 10/10:10 年、⽉、⽇、周⼏等

Date 类

 java.util 包提供了 Date 类来封装当前的 ⽇期和时间。
构造函数

//当前时间
Date()

//从1970年1⽉1⽇起的毫秒数作为参数
Date(long millisec)

常见方法

//返回⾃ 1970 年 1 ⽉ 1 ⽇ 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
long getTime( )

//调⽤此⽅法的Date对象在指定⽇期之后返回true,否则返回false。
boolean after(Date date)

//调⽤此⽅法的Date对象在指定⽇期之前返回true,否则返回false。
boolean before(Date date)

JDK8 时间日期处理类

  • Java 8 通过发布新的 Date-Time API (JSR 310)来进 ⼀步加强对 ⽇期与时间的处理
  • 新增了很多常 ⻅的 API,如 ⽇期/时间的 ⽐较,加减,格式化等
  • 包所在位置 java.time
  • 核心类
LocalDate:不包含具体时间的⽇期。 年月日
LocalTime:不含⽇期的时间。  时分秒
LocalDateTime:包含了⽇期及时间。

LocalDate API 示例

@Test
    public void localDateTesting(){
        LocalDate today = LocalDate.now();

        //年月日
        System.out.println("今天的日期:" + today);//今天的日期:2019-12-24

        //年
        System.out.println("现在是哪一年:" + today.getYear());//现在是哪一年:2019
        //月
        System.out.println("现在是哪一月:" + today.getMonth());//现在是哪一月:DECEMBER
        //月(赎数字)
        System.out.println("现在是哪一月(数字):" + today.getMonthValue());//现在是哪一月(数字):12
        //日
        System.out.println("现在是几号:" + today.getDayOfMonth());//现在是几号:24
        //周几
        System.out.println("现在是周几:" + today.getDayOfWeek());//现在是周几:TUESDAY
        //一年中的第几天
        System.out.println("一年中的第几天:" + today.getDayOfYear());//一年中的第几天:358
        
        //加减年份, 加后返回的对象才是修改后的, 旧的依旧是旧的
        LocalDate newDate = today.plusYears(1);
        System.out.println("修改好的日期:" + newDate);//修改好的日期:2020-12-24
        System.out.println("未修改的日期:" + today);//未修改的日期:2019-12-24

        //日期比较(2020年在2019年之后:true)
        System.out.println("isAfter:" + newDate.isAfter(today));//isAfter:true

        //getYear() int 获取当前⽇期的年份
        //getMonth() Month 获取当前⽇期的⽉份对象
        //getMonthValue() int 获取当前⽇期是第⼏⽉
        //getDayOfWeek() DayOfWeek 表示该对象表示的⽇期是星期⼏
        //getDayOfMonth() int 表示该对象表示的⽇期是这个⽉第⼏天
        //getDayOfYear() int 表示该对象表示的⽇期是今年第⼏天
        //withYear(int year) LocalDate 修改当前对象的年份
        //withMonth(int month) LocalDate 修改当前对象的⽉份
        //withDayOfMonth(int dayOfMonth) LocalDate 修改当前对象在当⽉的⽇期
        //plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年份数
        //plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的⽉份数
        //plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数
        //plusDays(long daysToAdd) LocalDate 当前对象增加指定的天数
        //minusYears(long yearsToSubtract) LocalDate 当前对象减去指定的年数
        //minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的⽉数
        //minusWeeks(long weeksToSubtract) LocalDate 当前对象减去指定的周数
        //minusDays(long daysToSubtract) LocalDate 当前对象减去指定的天数
        //compareTo(ChronoLocalDate other) int ⽐较当前对象和other对象在时间上的⼤⼩,返回值如果为正,则当前对象时间较晚,
        //isBefore(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在other对象⽇期之前
        //isAfter(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在other对象⽇期之后
        //isEqual(ChronoLocalDate other) boolean ⽐较两个⽇期对象是否相等
    }

LocalTime
 省略

LocalDateTime

@Test
    public void localDateTimeTesting(){
        //现在时间日期
        LocalDateTime today = LocalDateTime.now();//2019-12-24T13:14:33.560
        System.out.println(today);

        //自定义时间日期
        LocalDateTime newLocalDateTime = LocalDateTime.of(2020, 12, 24, 13, 14, 33);

        //计算⽇期时间差  第二个参数减第一个参数 java.time.Duration
        Duration duration = Duration.between(today, newLocalDateTime);
        System.out.println(duration.toDays());//两个时间差的天数    365
        System.out.println(duration.toHours());//两个时间差的⼩时数  8783
        System.out.println(duration.toMinutes());//两个时间差的分钟数    527035
        System.out.println(duration.toMillis());//两个时间差的毫秒数 31622129130
        System.out.println(duration.toNanos());//两个时间差的纳秒数  31622129130000000
    }

时间日期格式化

 程序打印,或者 ⽹ ⻚显示时间 ⽇期格式,⽤户有不同的需求,则需要根据 ⼀定的规则进 ⾏格式化。
常用占位符

y  四位数年份 
M  ⽉ 
d  ⽇ 
h  时 在上午或下午 (1~12) 
H  时 在⼀天中 (0~23) 
m  分 
s  秒 
S  毫秒

JDK8 之后引入线程安全的日期与时间DateTimeFormatter

@Test
    public void formatTest(){
        //创建当前时间对象
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);//2019-12-24T13:04:29.124

        //格式化
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String localDateTimeStr = dateTimeFormatter.format(localDateTime);
        System.out.println(localDateTimeStr);//2019-12-24 13:06:04

    }

作者:Soulboy