java8 Instant.now()遇到的问题

2022年11月20日10:58:24

在java.util.Date类与LocalDate、LocalDateTime类之间转换中
均可以通过Instant作为中间类完成转换,Instant的使用还是比较方便的,下面介绍Instant的使用。

一、创建Instant实例

Instant now= Instant.now();
System.out.println("now:"+now);

控制台输出:

2020-09-08T07:40:40.984Z

注意:通过这种方式获取的时间戳与北京时间相差8个时区,需要修正为北京时间,通过查看源代码发现Instant.now()使用等是UTC时间Clock.systemUTC().instant()。LocalDate、LocalDateTime 的now()方法使用的是系统默认时区 不存在Instant.now()的时间问题。
###解决方法
增加8个小时

Instant now= Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
System.out.println("now:"+now);

控制台输出:

2020-09-08T15:40:40.984Z

二、Instant获取long类型的10位秒数、13位毫秒数

Instant now= Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
System.out.println("秒数:"+now.getEpochSecond());
System.out.println("毫秒数:"+now.toEpochMilli());

控制台输出:

秒数:1539170157
毫秒数:1539170157886

LocalDateTime输出毫秒数的方式,比Instant多一步转换

LocalDateTime localDateTime= LocalDateTime.now();//LocalDateTime转Instant
Instant localDateTime2Instant= localDateTime.atZone(ZoneId.systemDefault()).toInstant();
System.out.println("LocalDateTime 毫秒数:"+localDateTime2Instant.toEpochMilli());

控制台输出:

LocalDateTime 毫秒数:1539141733010
import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import java.util.Date;/**
 * @author : yewang
 * create at:  2020/9/8  2:33 下午
 */publicclassMain{//获取当前日期publicstaticvoidgetCurrentDate(){
        LocalDate today= LocalDate.now();
        System.out.println("Todays Local date:"+ today);
        Date date=newDate();
        System.out.println(date);}//获取年月日信息publicstaticvoidgetDetailDate(){
        LocalDate today= LocalDate.now();int year= today.getYear();int month= today.getMonthValue();int day= today.getDayOfMonth();
        System.out.println(year);
        System.out.println(month);
        System.out.println(day);}//处理特定日期publicstaticvoidhandleSpecialDate(){
        LocalDate dateOfToday= LocalDate.of(2020,9,3);
        System.out.println(dateOfToday);}//判断两个日期是否相等publicstaticvoidcompareDate(){
        LocalDate today= LocalDate.now();
        LocalDate date1= LocalDate.of(2020,9,8);if(date1.equals(today)){
            System.out.printf("today %s and date1 %s is sameday",today,date1);
            System.out.println();}}//检查像生日这种周期性事件publicstaticvoidcycleDate(){
        LocalDate today= LocalDate.now();
        LocalDate dateOfBitrh= LocalDate.of(2018,9,8);
        MonthDay birthday= MonthDay.of(dateOfBitrh.getMonth(), dateOfBitrh.getDayOfMonth());
        MonthDay currentMonthDay= MonthDay.from(today);if(birthday.equals(currentMonthDay)){
            System.out.println("Happy Birthday!");}else{
            System.out.println("Sorry ,today is not your birthday!");}}//获取当前时间publicstaticvoidgetCurrentTime(){
        LocalTime now= LocalTime.now();
        System.out.println("local time :"+ now);}//增加小时publicstaticvoidplusHours(){
        LocalTime now= LocalTime.now();
        LocalTime newTime= now.plusHours(4);
        System.out.println(newTime);}//计算一星期后的日期publicstaticvoidnextWeek(){
        LocalDate today= LocalDate.now();
        LocalDate nextWeek= today.plusDays(7);
        System.out.println("nextWeek is:"+ nextWeek);}//计算一年前或者一年后的日期publicstaticvoidminusDate(){
        LocalDate today= LocalDate.now();
        LocalDate previousYear= today.minus(1, ChronoUnit.YEARS);
        System.out.println("Date before 1 year:"+ previousYear);
        LocalDate nextYear= today.plus(1, ChronoUnit.YEARS);
        System.out.println("Date next 1year:"+ nextYear);}//获取时钟类publicstaticvoidclock(){// 根据系统时间返回当前时间并设置为UTC。
        Clock clock= Clock.systemUTC();
        System.out.println("Clock : "+ clock);// 根据系统时钟区域返回时间
        Clock defaultClock= Clock.systemDefaultZone();
        System.out.println("Clock : "+ clock);}//如何用Java判断日期是早于还是晚于另一个日期publicstaticvoidisBeforeOrIsAfter(){
        LocalDate today= LocalDate.now();

        LocalDate tomorrow= LocalDate.of(2018,1,29);if(tomorrow.isAfter(today)){
            System.out.println("Tomorrow comes after today");}//减去一天
        LocalDate yesterday= today.minus(1, ChronoUnit.DAYS);if(yesterday.isBefore(today)){
            System.out.println("Yesterday is day before today");}}//获取特定时区下面的时间publicstaticvoidgetZoneTime(){//设置时区
        ZoneId america= ZoneId.of("America/New_York");

        LocalDateTime localtDateAndTime= LocalDateTime.now();

        ZonedDateTime dateAndTimeInNewYork= ZonedDateTime.of(localtDateAndTime, america);
        System.out.println("现在的日期和时间在特定的时区 : "+ dateAndTimeInNewYork);}//使用 YearMonth类处理特定的日期publicstaticvoidcheckCardExpiry(){
        YearMonth currentYearMonth= YearMonth.now();
        System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth());

        YearMonth creditCardExpiry= YearMonth.of(2028, Month.FEBRUARY);
        System.out.printf("Your credit card expires on %s %n", creditCardExpiry);}//检查闰年publicstaticvoidisLeapYear(){
        LocalDate today= LocalDate.now();if(today.isLeapYear()){
            System.out.println("This year is Leap year");}else{
            System.out.println("2020 is not a Leap year");}}//计算两个日期之间的天数和月数publicstaticvoidcalcDateDays(){
        LocalDate today= LocalDate.now();

        LocalDate java8Release= LocalDate.of(2018, Month.MAY,14);

        Period periodToNextJavaRelease= Period.between(today, java8Release);

        System.out.println("Months left between today and Java 8 release : "+ periodToNextJavaRelease.getMonths());}publicstaticvoidgetTimestamp(){
        Instant timestamp= Instant.now();
        System.out.println("What is value of this instant "+ timestamp);}// 使用预定义的格式化工具去解析或格式化日期publicstaticvoidformateDate(){
        String dayAfterTommorrow="20180210";
        LocalDate formatted= LocalDate.parse(dayAfterTommorrow, DateTimeFormatter.BASIC_ISO_DATE);
        System.out.printf("Date generated from String %s is %s %n", dayAfterTommorrow, formatted);}publicstaticvoidmain(String[] args){getCurrentDate();getDetailDate();handleSpecialDate();compareDate();cycleDate();getCurrentTime();plusHours();nextWeek();minusDate();clock();isBeforeOrIsAfter();getZoneTime();checkCardExpiry();isLeapYear();calcDateDays();getTimestamp();formateDate();}}
  • 作者:大叶子不小
  • 原文链接:https://wangye7303.blog.csdn.net/article/details/108470129
    更新时间:2022年11月20日10:58:24 ,共 5260 字。