关于 jdk1.8 时间处理的方法(实用)

package avg.position.zhangdi;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Period;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAccessor;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class DateTimeFormat {
public static void main(String[] args) throws ParseException {

    /*java.time包内,有几个比较重要的组件,Instant(时间戳);LocalDate(日期);LocalDate(时间);LocalDateTime(日期时间);
    ZonedDateTime(带有区域信息的日期时间,比如中国默认使用的是东八区)。Period(如两个日期之间相差的天数);Druation(两个日期时间之间间隔的秒和纳秒)。*/

    Instant now = Instant.now();
    System.out.println(now.toString());  // 2018-08-06T09:44:13.677Z  (utc时间格式,标准时间格式)
    System.out.println(now.get(ChronoField.MILLI_OF_SECOND)); //毫秒 677
    System.out.println(now.get(ChronoField.MICRO_OF_SECOND)); //微秒 677000
    System.out.println(now.get(ChronoField.NANO_OF_SECOND));  //纳秒 677000000
    System.out.println(ZoneId.systemDefault());  // Asia/Shanghai
    LocalDateTime localDateTime = LocalDateTime.ofInstant(now, ZoneId.systemDefault());
    LocalDate localDate = LocalDate.now();  //
    System.out.println(localDate);  //2018-08-06
    System.out.println(localDateTime); //2018-08-06T17:44:13.677

    // 获得当前日期
    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1.toString());
    // 日期加上1天
    LocalDate localDate2 = localDate1.plusDays(1);
    System.out.println(localDate2.toString());
    // 日期加上一周
    LocalDate localDate3 = localDate1.plusWeeks(1);
    System.out.println(localDate3);
    // 计算当前年的第52天是几月几号
    System.out.println("今年的第52天 = " + localDate1.withDayOfYear(52));

    // 字符串转日期
    DateTimeFormatter strToDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    TemporalAccessor dateTemporal = strToDateFormatter.parse("2017-01-01 13:00:00");
    LocalDate date = LocalDate.from(dateTemporal);
    System.out.println(date);
    LocalDateTime dateTime = LocalDateTime.parse("2017-01-01 13:00:00", strToDateFormatter);
    System.out.println(dateTime.toString());

    // 格式化日期
    LocalDateTime localDateTime1 = LocalDateTime.now();
    DateTimeFormatter dateToStrFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String dateStr = dateToStrFormatter.format(localDateTime1);
    System.out.println(dateStr);

    // 只处理时间
    LocalTime localTime = LocalTime.now();
    System.out.println("local time = " + localTime);
    System.out.println("plus 12 hours = " + localTime.plusHours(12));

    /*Period
    Period代表的是两个日期之间的天、月、年数差值,当然,我们也可以直接使用日期中的until方法来完成同样的效果。*/

    LocalDate startDate = LocalDate.now();
    LocalDate endDate = startDate.plusDays(1);

    Period period = Period.between(startDate, endDate);
    System.out.println("间隔的天数" + period.getDays());
    System.out.println("间隔的月数:" + period.getMonths());
    System.out.println("间隔的年数:" + period.getYears());

    // 直接使用日期类中的方法计算日期间隔
    long days = startDate.until(endDate, ChronoUnit.DAYS);
    System.out.println("间隔的天数:" + days);
    long weeks = startDate.until(endDate, ChronoUnit.WEEKS);
    System.out.println("间隔的周数:" + weeks);

    /*Duration表示的是两个日期时间间隔的秒以及纳秒数。*/
    LocalDateTime start = LocalDateTime.now();
    LocalDateTime end = start.plusDays(1);
    Duration duration = Duration.between(start, end);
    System.out.println("间隔的秒数:" + duration.get(ChronoUnit.SECONDS));
    //System.out.println("间隔的毫秒数:" + duration.get(ChronoUnit.MICROS));
    System.out.println("间隔的纳秒数:" + duration.get(ChronoUnit.NANOS));

    ///////////////////////////////
    DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    String dateTimeF = LocalDateTime.now().format(fmt); //将当前时间转换为  2017-10-19 10:25:36
    //将时间装换为long值      时间戳
    long currentTime = LocalDateTime.parse(dateTimeF,fmt).atZone(ZoneId.of("Asia/Shanghai")).toInstant().toEpochMilli();
    System.out.println("时间戳:"+currentTime);
    //将long转为格式化时间字符串
    String timeNow = fmt.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTime),ZoneId.of("Asia/Shanghai")));
    System.out.println("时间:"+timeNow);

   /* Date转LocalDate:*/
    Date date11 = new Date();
    LocalDate localDate11 = date11.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    System.out.println(localDate11);
  /*  LocalDate 转 Date:*/
    LocalDateTime localDateTime22 = LocalDateTime.now();
    ZoneId zoneId = ZoneId.systemDefault();
    ZonedDateTime zdt = localDateTime22.atZone(zoneId);
    Date dateType = Date.from(zdt.toInstant());
    //Date dateType = Date.from(localDateTime22.atZone(ZoneId.systemDefault()).toInstant());
    System.out.println("LocalDateTime = " + localDateTime22);
    System.out.println("Date = " + dateType);

    //jdk 1.7
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy");
    Date date33 = sdf.parse("2018-08-08");
    String aaa = sdf2.format(date33);
    System.out.println(aaa);
}

    public static List getDateArrayList(String startTime, String endTime) throws ParseException{

           List dateArrayList = new ArrayList();
              SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
               long stime=sdf.parse(startTime).getTime();
               long etime=sdf.parse(endTime).getTime();
               while(stimeetime){
                String time=sdf.format(new Date(stime));
                dateArrayList.add(time);
                stime += 24*60*60*1000;
               }
               return dateArrayList;
           }

}

Original: https://www.cnblogs.com/zhaoyan001/p/12182873.html
Author: 程序猿001
Title: 关于 jdk1.8 时间处理的方法(实用)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544083/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JDK成长记7:3张图搞懂HashMap底层原理!

    HashMap基本原理和优缺点 HashMap基本原理和优缺点 一句话讲, HashMap底层数据结构,JDK1.7数组+单向链表、JDK1.8数组+单向链表+红黑树。 HashM…

    Java 2023年6月5日
    080
  • spring boot打包成war包的页面该放到哪里?

    背景 经常有朋友问我,平时都是使用spring mvc,打包成war包发布到tomcat上,如何快速到切换到spring boot的war或者jar包上? 先来看看传统的war包样…

    Java 2023年5月30日
    062
  • fastposter v2.7.1 紧急发布 电商海报编辑器

    fastposter v2.7.1 紧急发布 电商海报编辑器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发。二维码海报,…

    Java 2023年6月5日
    071
  • 常见API使用

    String类 字符串相关的类 Java程序中的所有字符串文字(例如”abc”)都实现为此类的实例 字符串是不变的 他们的值在创建后无法更改 Date类 D…

    Java 2023年6月8日
    046
  • 看Spring源码不得不会的@Enable模块驱动实现原理讲解

    这篇文章我想和你聊一聊 spring的@Enable模块驱动的实现原理。 在我们平时使用spring的过程中,如果想要加个定时任务的功能,那么就需要加注解@EnableSchedu…

    Java 2023年6月16日
    094
  • JAVA学习过程记录(六)

    final final是java中的一个关键字,表示最终的,不可变的,final可以修饰变量方法还有类。 如果给类添加final关键字,则类无法继承。 final修饰的方法无法被重…

    Java 2023年6月7日
    060
  • Thymeleaf是什么?该如何使用。

    先了解Thymeleaf是什么 1. Thymeleaf 简介 Thymeleaf 是新⼀代 Java 模板引擎,与 Velocity、FreeMarker 等传统 Java 模板…

    Java 2023年6月9日
    064
  • OpenFeign和Consul爱恨交织的两天

    1. 背景 在公司对项目进行拆分,用consul做注册中心。既然弄注册中心了, 那就得远程调用,那就得整上OpenFeign进行远程调用,你说是不? 不能说就搞个RestTempl…

    Java 2023年6月15日
    077
  • 如何实现跨域?

    https://blog.csdn.net/meism5/article/details/90414283 Original: https://www.cnblogs.com/cr…

    Java 2023年6月13日
    068
  • ch01 常见DOS命令

    常见DOS命令 CMD打开方式 开始-系统-命令提示符 Win键+R 输入CMD打开控制台 在任意文件夹下,按住shift+右键,点击在此处打开命令运行窗口 资源管理器的地址栏前面…

    Java 2023年6月9日
    072
  • Java集合归纳总结

    我们讲集合,就是Collection顶级接口下包括的一些常用集合数据结构,大致分为三类:List(可重复元素集)、Map(KV映射集)、Set(不可重复集)、Queue(队列) 总…

    Java 2023年6月5日
    066
  • Hash

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何…

    Java 2023年6月5日
    079
  • 时序数据库influxdb-1.8.9部署记录步骤

    何谓时间序列数据库? 什么是时间序列数据库,最简单的定义就是数据格式里包含Timestamp字段的数据,比如某一时间环境的温度,CPU的使用率等。但是,有什么数据不包含Timest…

    Java 2023年6月9日
    068
  • HashMap底层原理及jdk1.8源码解读

    一、前言 写在前面:小编码字收集资料花了一天的时间整理出来,对你有帮助一键三连走一波哈,谢谢啦!! HashMap在我们日常开发中可谓经常遇到,HashMap 源码和底层原理在现在…

    Java 2023年6月15日
    071
  • 根据子类查询父类

    1.如果改子类有父类,则把父类加入子类的父ID中 private static List breadthParentFirst(List rootTree) { if (Colle…

    Java 2023年6月16日
    051
  • 140_SpringBoot案例-fanout发布订阅模式

    整体核心 目标 实现步骤 生产者 创建生产者工程:springboot-rabbitmq-fanout-producer 在pom.xml中引入依赖 在application.ym…

    Java 2023年6月7日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球