首页 > 编程语言 >Java之日期

Java之日期

时间:2024-08-22 16:09:28浏览次数:13  
标签:Java System 日期 LocalDateTime println now ZonedDateTime out

目录

日期

介绍:

  • 理解日期、时间和时刻
  • 理解时区的概念
  • 理解夏令时,同一地区使用GMT/UTC和城市表示的时区可能导致时间不同
    • GTM-05:00
    • America/New_York
  • 理解locale用来针对当地用户习惯格式化日期、时间、数字、货币等。

Java有两套日期和时间的API

  • java.util.since/Calendar
  • java.time

java.time的API (目前多用time)

一、LocalDate

1. 基本用法

/**
     * 常见基本的用法
     */
    public static void use() {

        LocalDate localDate = LocalDate.now(); // 获取当前日期
        LocalTime localTime = LocalTime.now(); // 获取当前时间
        LocalDateTime localDateTime = LocalDateTime.now(); // 获取当前日期和时间
        System.out.println(localDate); // 严格按照ISO 8601格式打印
        System.out.println(localTime); // 严格按照ISO 8601格式打印
        System.out.println(localDateTime); // 严格按照ISO 8601格式打印

    }

2. 日期之间的转化

  /**
     * 日期之间的转化
     */
    public static void transform() {
        //  方式一:toLocalDate  toLocalTime
        LocalDateTime dt = LocalDateTime.now();
        LocalDate localDate = dt.toLocalDate(); // 转化成当前日期
        LocalTime localTime = dt.toLocalTime(); // 转化成 当前时间
        System.out.println("localDate = " + localDate);
        System.out.println("localTime = " + localTime);

        // 方式二: 固定转换为时间
        LocalDate localDate1 = LocalDate.of(2023, 11, 1);
        LocalTime localTime1 = LocalTime.of(18, 11, 22);
        LocalDateTime localDateTime = LocalDateTime.of(2029, 1, 1, 1, 1, 1);


    }

3. LocalDateTime 计算

/**
     * LocalDateTime 计算
     */
    public static void timeCalculate() {
        //加时间
        LocalDateTime plus = LocalDateTime.now().plus(Duration.ofDays(1));
        LocalDateTime localDateTime = LocalDateTime.now().plusHours(1);
        System.out.println(localDateTime);
        System.out.println(plus);
        //时间减
        LocalDateTime minus = LocalDateTime.now().minus(Duration.ofDays(1));
        System.out.println(minus);
        LocalDateTime localDateTime1 = LocalDateTime.now().minusHours(1);
        System.out.println(localDateTime1);
        //获取当前时间,并且将小时设置为1
        LocalDateTime with = LocalDateTime.now().with(LocalTime.of(1, 1, 1));
        System.out.println(with);
        LocalDateTime localDateTime2 = LocalDateTime.now().withHour(1);
        System.out.println(localDateTime2);
    }

4. 格式化 日期

 /**
     * 格式化 日期
     */
    private static void format() {

        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        String format = dateTimeFormatter.format(LocalDateTime.now());
        System.out.println(format);
        String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
        System.out.println(format1);

    }

二、Instant

1. 基本应用

 /**
     * 时间戳类 Instant 的基本应用
     */
    public static void instantUse() {

        Instant instant = Instant.now();
        System.out.println("秒 " + instant.getEpochSecond()); // 秒
        System.out.println("毫秒 " + instant.toEpochMilli()); // 毫秒
        System.out.println("时间戳: " + System.currentTimeMillis()); // 时间戳,毫秒


    }

2. 常见方法

 /**
     * 将时间秒级别的时间戳转化为时间
     * 使用方法: Instant.ofEpochSecond()
     * 将时间毫秒级别的时间戳转化为时间,使用 Instant.ofEpochMilli()
     * 转化思路:
     * 1. 先转化为 Instant 类
     * 2. instant 设置时区,转化为 ZonedDateTime
     * 3. 格式化输出 DateTimeFormatter
     *
     * @param time 传入时间戳,秒级别
     */
    public static void methods(long time) {

        Instant instant = Instant.ofEpochSecond(time);
        // Instant instant1 = Instant.ofEpochMilli(System.currentTimeMillis());
        ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault());
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String format = dateTimeFormatter.format(zonedDateTime);
        System.out.println("当前时间为: " + format);

    }

3. 时间计算

 /**
     * 计算时间差
     */
    public static void timeCalculate() {

        Instant begin = Instant.now();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        Instant end = Instant.now();
        // 方式一:直接减
        long difference = (end.toEpochMilli() - begin.toEpochMilli()) / 1000;
        System.out.println("耗时:" + difference);
        // 方式二:使用 Duration
        Duration duration = Duration.between(begin, end);
        System.out.println("耗时:" + duration.toMillis() + "毫秒");

        // 方式三:使用内置方法
        long until = begin.until(end, ChronoUnit.MILLIS);
        System.out.println("耗时:" + until + "毫秒");
    }

4. 时间转化

 /**
     * localDateTime 与 instant 的转换
     */
    public static void transform() {
        //转化一:instant 转 localDateTime
        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());
        System.out.println(localDateTime);
        //转化二:localDateTime 转 instant
        Instant instant = localDateTime.toInstant(ZoneOffset.of("+8"));
        System.out.println(instant);
    }

三、DateTimeFormatter 时间格式化

1. 基本用法

  /**
     * 用法
     */
    public static void classUse() {

        // 方法一:创建DateTimeFormatter时,我们仍然通过传入格式化字符串实现:
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 方法二:另一种创建DateTimeFormatter的方法是,传入格式化字符串时,同时指定Locale:
        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("E,yyyy-MM-dd HH:mm:ss", Locale.CHINA);

    }

2. 各类时间格式化

 /**
     * 各类时间格式化
     */
    public static void transform() {

        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd 'T' HH:mm ZZZZ");
        System.out.println(formatter.format(zonedDateTime));

        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy MM dd EE  HH:mm ", Locale.CHINA);
        System.out.println(formatter1.format(zonedDateTime));
        // 按照美国习惯,输出日期和时间:
        DateTimeFormatter formater2 = DateTimeFormatter.ofPattern("E, MMMM/dd/yyyy HH:mm", Locale.US);
        System.out.println(formater2.format(ZonedDateTime.now(Clock.system(ZoneId.of("America/New_York")))));

    }

四、ZonedDateTime

1. 基本用法

 /**
     * ZonedDateTime的简单使用
     * ZoneId.of("America/New_York") 指定时区
     */
    public static void zoneDateTimeUse() {

        ZonedDateTime zbj = ZonedDateTime.now();  // 默认时区,默认时当前时间的时区
        ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 用指定时区获取当前时间
        System.out.println(zbj);
        System.out.println(zny);
    }

2. ZonedDateTime 与LocalDateTime 之间转化

/**
     * ZonedDateTime 与LocalDateTime 之间转化
     * LocalDateTime 转化为ZonedDateTime 使用的是 atZone,然后在里面指定时区
     */
    public static void transform() {

        LocalDateTime ldt = LocalDateTime.now();
        ZonedDateTime zbj = ldt.atZone(ZoneId.systemDefault());
        ZonedDateTime zny = ldt.atZone(ZoneId.of("America/New_York"));
        System.out.println(zbj);
        System.out.println(zny);

        ZonedDateTime zbj1 = ZonedDateTime.now();
        System.out.println(zbj1);
        LocalDateTime ldt1 = zbj1.toLocalDateTime();
        System.out.println(ldt1);
    }

3. 时区转换

 public static void zoneTransform() {

        // 获取中国区的时间
        ZonedDateTime zbj = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
        // 获取纽约的时间
        ZonedDateTime zny = zbj.withZoneSameInstant(ZoneId.of("America/New_York"));
        System.out.println(zbj);
        System.out.println(zny);


    }

五、时间计算

一般时间的计算主要有:Duration 类, Period 类或 ChronoUnit.between 方法。 甲持续时间测量使用基于时间的值(秒,毫微秒)的时间量。Period 使用基于日期的值(年,月,日)。

 /**
     * Duration类表示秒或纳秒时间间隔,适合处理较短的时间,需要更高的精确性。我们能使用between()方法比较两个瞬间的差
     *
     */
    public static void durationDemo() {

        Instant t1 = Instant.now();
        Instant t2 = Instant.now();
        // 计算差值,并且返回毫秒  between 可以传 LocalDateTime,instant 这两个值
        Duration duration = Duration.between(LocalDateTime.of(2021,1,1,0,0,0), LocalDateTime.now());
        System.out.println("耗时" + duration.toNanos() + "纳秒");
        System.out.println("耗时" + duration.toMillis() + "毫秒");
        System.out.println("耗时" + duration.toSeconds() + "秒");
        System.out.println("耗时" + duration.toMinutes() + "分钟");
        System.out.println("耗时" + duration.toHours() + "小时");
        System.out.println("耗时" + duration.toDays() + "天");

        //     时间计算
        //    时间增加
        Duration duration1 = duration.plusDays(1);
        System.out.println(duration1.toMillis());
        Duration duration2 = duration.plusHours(1);
        System.out.println(duration2.toMillis());

        Duration duration3 = duration.plusMinutes(1);
        System.out.println(duration3.toMillis());

        Duration duration4 = duration.plusSeconds(1);
        System.out.println(duration4.toMillis());

        Duration duration5 = duration.plusNanos(1);
        System.out.println(duration5.toMillis());

        //    时间减少
        Duration duration6 = duration.minusDays(1);
        System.out.println(duration6.toMillis());

        Duration duration7 = duration.minusHours(1);
        System.out.println(duration7.toMillis());

        Duration duration8 = duration.minusMillis(1);
        System.out.println(duration8.toMillis());

        Duration duration9 = duration.minusSeconds(1);
        System.out.println(duration9.toMillis());

        Duration duration10 = duration.minusNanos(1);
        System.out.println(duration10.toMillis());


    }
 /**
     * Period 类表示一段时间的年、月、日,开使用between()方法获取两个日期之间的差作为Period 对象返回:
     */
    public static void periodDemo() {

        LocalDate startDate = LocalDate.of(2015, 2, 20);
        LocalDate endDate = LocalDate.of(2017, 1, 15);
        //计算时间差值
        Period period = Period.between(startDate, endDate);
        System.out.println(period.getYears() + "年" + period.getMonths() + "月" + period.getDays() + "天");
        //    Period类型对象是基于年、月、日和周
        Period fromUnits = Period.of(3, 10, 10);

    }

标签:Java,System,日期,LocalDateTime,println,now,ZonedDateTime,out
From: https://www.cnblogs.com/alex-oos/p/18374062

相关文章

  • java+vue计算机毕设旅游景点预约系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,人们对旅游体验的需求日益个性化与高效化。传统的旅游预订方式往往存在信息不对称、购票流程繁琐、景点拥堵等问题,影响了游客的......
  • java+vue计算机毕设开放实验室网上预约系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育体系的不断发展和教育资源的日益丰富,实验室作为培养学生实践能力和创新精神的重要场所,其使用效率与管理水平成为衡量高校教学质量的重要......
  • java+vue计算机毕设农资电子监管系统的设计与实现【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着农业现代化的不断推进,农资产品的流通与管理成为保障农业生产高效、安全的重要环节。传统农资管理模式存在信息不对称、监管难度大、效率低下等问......
  • java版本12计算2000年1月到2023年6月相差几年
     JDK12版本importjava.time.YearMonth;importjava.time.temporal.ChronoUnit;publicclassYearsBetweenDates{publicstaticvoidmain(String[]args){YearMonthstartYearMonth=YearMonth.of(2000,1);YearMonthendYearMonth=YearMon......
  • Java学习笔记4
    1、应用范畴不同:主键属于索引的一种。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。2、种类不同:根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索......
  • Java 之反射
    目录反射一、通过反射获取class的四种方法二、反射中访问字段三、获取反射的方法四、反射调用构造方法五、反射获取继承关系反射概念:通过Classs实例获取class信息的方法称为反射一、通过反射获取class的四种方法/***通过反射获取class实例的方法有四种:*/......
  • 【HTML】使用Javascript制作网页
    1、Javascript的语法规则JavaScript程序按照在HTML文件中出现的顺序逐行执行。JavaScript严格区分字母大小写。在JavaScript中,每行结尾的分号可有可无。JavaScript中主要包括两种注释:单行注释和多行注释。单行注释使用双斜线“//”作为注释标签,多行注释是以“/”标签开始,以......
  • Spire.Doc for Java(cracked)实现复制word中的表格(2)
    先看效果,符不符合你的需求。背景: word插入的表格数据填充到该表格时,如果数据量超过该的表格数,应将表格在下一页重新创建该表格,并将剩余数据继续填充到新的表格中。再简单点:word表格只有5行,但是数据有20行,表格不够添加,就还需要复制3份一样的表格,中间需要分页符隔开,最终得......
  • Java学习笔记3事务的四大特性
      ACID,分别是原子性、一致性、隔离性、持久性。①原子性(Atomiticy)原子性指事务包含的所有操作要么全部执行成功,要么全部失败回滚,因此事务的操作如果成功就必须要全部应用到数据库,如果操作失败则不能对数据库有任何影响。②一致性(Consistency)一致性是指事务必须使数据库从......
  • Java学习笔记2(数据库的三大范式)
    什么是范式?范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。最常用的三大范式第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)ps:举个例子,地址列山东省青岛市市北区,可以这样存储,但是实际上不满足第一范式,因为省市区是可以分......