Time包----JDK8.0引入的时间API。

时间:2024-4-9    作者:老大夫    分类: JAVA


在Date后引入的Calendar也不能很好的规范时间的数据类型,
在JDK8.0时引入了Time这一新的包
方法不用背,现用现查也可以

之前存在的问题

  1. Date和Calendar修改时间时,本身的数值也会改变。如果保留原数值还要备份,很麻烦。
  2. 偏移量,创建时间的年份会自动加1970年。 如果创建参数是2000,创建出来就会是3970年。很麻烦
  3. 格式化,SimpleDateFormat只对Date起作用,Calendar更常用一些。很麻烦
  4. 此外线程还是不安全的,不能处理闰秒(地球潮汐偏移影响,相对于原子时间的变化)

Time包

java.time
java.time.chrono 提供对不同日历系统的访问
java.time.format 提供格式化和解析时间日期
java.time.temporal 包括底层框架和扩展特性
java.time.zone 包含时区的支持类

1. 本地时间日期

LocalDate 、 LocalTime 、LocalDateTime

方法 作用
now()/ now(ZoneId zone) 静态方法,根据当前时间创建对象/指定时区的对象
of(xx,xx,xx,xx,xx,xxx) 静态方法,根据指定日期/时间创建对象
getDayOfMonth()/getDayOfYear() 获得月份天数(1-31) /获得年份天数(1-366)
getDayOfWeek() 获得星期几(返回一个 DayOfWeek 枚举值)
getMonth() 获得月份, 返回一个 Month 枚举值
getMonthValue() / getYear() 获得月份(1-12) /获得年份
getHours()/getMinute()/getSecond() 获得当前对象对应的小时、分钟、秒
withDayOfMonth()/withDayOfYear()/withMonth()/withYear() 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
with(TemporalAdjuster t) 将当前日期时间设置为校对器指定的日期时间
plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours() 向当前对象添加几天、几周、几个月、几年、几小时
minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours() 从当前对象减去几月、几周、几天、几年、几小时
plus(TemporalAmount t)/minus(TemporalAmount t) 添加或减少一个 Duration 或 Period
isBefore()/isAfter() 比较两个 LocalDate
isLeapYear() 判断是否是闰年(在LocalDate类中声明)
format(DateTimeFormatter t) 格式化本地日期、时间,返回一个字符串
parse(Charsequence text) 将指定格式的字符串解析为日期、时间

初始化

public class TimeTest {
    public static void main(String[] args) {
        //初始化方法now()获取当前时间
        LocalTime lt=LocalTime.now();
        System.out.println(lt);

        LocalDate ld=LocalDate.now();
        System.out.println(ld);

        LocalDateTime ldt=LocalDateTime.now();
        System.out.println(ldt);

        //of方法获取指定时间,没有偏移量的设定
        LocalDate ld1=LocalDate.of(2012,12,12);
        System.out.println(ld1);

        //getXXX方法
        int dayOfMonth = ld1.getDayOfMonth();
        System.out.println(dayOfMonth);

        //plus增加日期,原日期不变也体现了Time的不可变性质
        LocalDate ld2 = ld1.plusDays(10);
        System.out.println(ld1);
        System.out.println(ld2);
    }
}

2. Instant 瞬时时间戳

类似于Date里的相对于1970年1月1日的毫秒值

方法 作用
now() 静态方法,返回默认UTC时区的Instant类的对象
ofEpochMilli(long epochMilli) 静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
atOffset(ZoneOffset offset) 结合即时的偏移来创建一个 OffsetDateTime
toEpochMilli() 返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳

初始化方法

public class InstantTest {
    public static void main(String[] args) {
        //now()获取当前时间
        Instant now = Instant.now();
        System.out.println(now);    //格林威治伦敦的时区,与我们相差8小时

        //atOffSet设置偏移量
        OffsetDateTime instant1 = now.atOffset(ZoneOffset.ofHours(8));
        System.out.println(instant1);

        //ofEpochMilli 设置时间的毫秒数
        Instant oneInstant = Instant.ofEpochMilli(13232132445123L);
        System.out.println(oneInstant);
    }
}

3. DateTimeFormatter

类似于Date使用的SimpleDateFormat , 用于格式化解析

方法 作用
ofPattern(String pattern) 静态方法,返回一个指定字符串格式的DateTimeFormatter
format(TemporalAccessort) 格式化一个日期、时间,返回字符串
parse(CharSequence text) 将指定格式的字符序列解析为一个日期、时间
public class DateTimeFormatTest {
    public static void main(String[] args) {
        //ofPattern方法自定义格式
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        //format方法 格式化 日期、时间---》字符串
        LocalDateTime now = LocalDateTime.now();
        String format = dtf.format(now);
        System.out.println(format);

        //parse方法 解析 字符串----》时间日期
        TemporalAccessor parse = dtf.parse(format);
        LocalDate date = LocalDate.from(parse);
        System.out.println(date);
    }
}

版权所有:伸手党盘
文章标题:Time包----JDK8.0引入的时间API。
文章链接:https://ssdpan.cn/?post=375
本站文章来源于网络搜集和原创,仅供学习使用,未经授权请勿用于任何商业用途,如有侵权及时联系删除

推荐阅读:


扫描二维码,在手机上阅读