【前端学java】java中的日期操作(13)

简介: 【8月更文挑战第10天】java中的日期操作

前端中的new Date()

在前端中,使用原生js操作日期使用new Date()这个构造函数。比如,我们获取时间戳

let time = new Date().getTime() 
console.log(time)                      // 1697531070333

我们简单复习一下js中一些常用的时间操作

getDate(): 返回日期对象中的日(从 131)。
getDay(): 返回日期对象中的星期几(从 060 表示星期日)。
getFullYear(): 返回日期对象中的四位年份。
getHours(): 返回日期对象中的小时(从 023)。
getMinutes(): 返回日期对象中的分钟(从 059)。
getSeconds(): 返回日期对象中的秒数(从 059)。
getTime(): 返回日期对象的毫秒表示,自19701100:00:00 UTC起。
getMonth(): 返回日期对象中的月份(从 0110 表示一月)。
setDate(day): 设置日期对象中的日。
setFullYear(year, month, day): 设置日期对象中的年份、月份和日。
setHours(hour, min, sec, millisec): 设置日期对象中的小时、分钟、秒和毫秒。
setMinutes(min, sec, millisec): 设置日期对象中的分钟、秒和毫秒。
setSeconds(sec, millisec): 设置日期对象中的秒和毫秒。
setTime(millisec): 以毫秒为单位设置日期对象。
setMonth(month, day): 设置日期对象中的月份和日。

java中的日期操作是怎么样的呢?

java中的日期操作

日期类、日历类及LocalDate类

在java中,也有一些列操作时间的方法,比如,在Java中,打印时间戳我们可以用System.currentTimeMillis方法。

public class Date {
   
   
    public static void main(String[] args) {
   
   
        // Date :日期类
        System.out.println(System.currentTimeMillis());   // 1697530889457
    }
}

System.currentTimeMillis返回以毫秒为单位的当前时间,即从1970年1月1日午夜开始到现在的时间差,结果以毫秒为单位表示。

java中的日期操作主要通过日期类(Date)日历类(Calendar)及LocalDate类,每个类都有其优点和缺点。

  1. Date类:Java中的基础日期类,包含日期时间的信息。但是,它的API不太直观,使用起来不太方便。此外,它也不支持时区,这使得它的使用有些受限。
  2. Calendar类:这个类提供了一个更抽象的日期和时间表示。它允许您更轻松地处理像时区,一年中的月份天数差异,闰年等复杂的问题。然而,它的API同样复杂,而且有些方法已经被标记为已过时。
  3. LocalDate类:这是Java 8引入的一个新的日期类。它只包含日期的信息,不包含时间。这个类使用起来比Date和Calendar更直观,更易用。此外,它还支持时区,这使得它能够更好地处理不同时区之间的日期和时间转换。如果您不需要处理时间,而且想使用一个现代,易用的API,那么LocalDate可能是一个好选择。

    日期类

    日期类是通过new Date()声明的类,我们在编译器输入new Date()时,会发现有java.util.Date和java.sql.Date。
    GIF 2023-10-17 16-49-11.gif

    java.util.Date和java.sql.Date都是Java中用于表示日期的类,与数据库交互,可以使用java.sql.Date,业务代码开发中,我们自然使用java.util.Date

new Date()的返回值

import java.util.Date;

public class DateStudy {
   
   
    public static void main(String[] args) {
   
   
        Date d = new Date();
        System.out.println(d);     // Tue Oct 17 16:52:41 CST 2023
    }
}

new Date() 的返回值是一个 java.util.Date 对象,其包含创建时的年、月、日、小时、分钟、秒和毫秒等信息。

日期格式化SimpleDateFormat

前端中日期格式化,我们经常会使用第三方插件如dayjs或者momentjs

let time = new Date().format("YYYY-MM-DD HH:mm:ss")
consloe.log(time)  // 2023-10-17 23:59:59

在java中,我们借助SimpleDateFormat类就可以快速实现日期的格式化,而不用引入额外东西。

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateStudy {
   
   
    public static void main(String[] args) {
   
   
        // 创建一个 Date 对象
        Date d = new Date();
        // 创建一个 SimpleDateFormat 对象,指定日期格式
        SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd");
        // 使用 SimpleDateFormat 对象格式化日期
        String time = formatter.format(d);

        System.out.println(time);  // 2023-10-17
    }
}

日期字符含义

  • y:年份。可以使用一位或四位表示,如“y”表示“2023”,“yyyy”表示“2023”。
  • M:月份。可以使用一位或两位表示,如“M”表示3月,“MM”表示“03”。
  • d:日期。可以使用一位或两位表示,如“d”表示8日,“dd”表示“08”。
  • H:小时(24小时制)。可以使用一位或两位表示,如“H”表示8点,“HH”表示“08”。
  • m:分钟。可以使用一位或两位表示,如“m”表示5分,“mm”表示“05”。
  • s:秒。可以使用一位或两位表示,如“s”表示6秒,“ss”表示“06”。

注意,java中的DD和前端中的DD含义不同。在java中,DD表示一年中的日期而不是一个月中的日期。

  // 创建一个 SimpleDateFormat 对象,指定日期格式
  SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-DD");
  // 使用 SimpleDateFormat 对象格式化日期
  String time = formatter.format(d);

  System.out.println(time);     // 2023-10-290

上述打印机结果中的290就是指的本年的第290天。

其他常用方法

Java中日期类的常用方法有很多,我们目前不用过多学习,大致了解即可。
getTime()
返回自1970年1月1日00:00:00 GMT以来的毫秒数。

Date d = new Date();
System.out.println(d.getTime()); // 1697535905242

before、after
比较两个日期的先后顺序。
image.png
注:new Date这种传参方式已经不被推荐,建议使用日历类操作了。

其他的不在列出。

日历类

java.util.Calendar类的常用方法包括:getTime()、setTime()、add()、get()、set()等。
我们来简单熟悉一下这些方法。

getTime

getTime()方法被用来检索此日历的日期和时间,通常以java.util.Date对象的形式返回。


import java.util.Calendar;
import java.util.Date;

public class DateStudy {
   
   
    public static void main(String[] args) {
   
   
        // 创建一个Calendar对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime());  // Tue Oct 17 18:10:12 CST 2023
    }
}

注意:创建日历对象的方式和创建日期对象的方式是有区别的!!

setTime

setTime()方法被用来设置此日历的日期和时间,Calendar.setTime 方法可以接受一个 Date 或 long 类型的时间参数,通常以java.util.Date对象的形式提供。
以java.util.Date对象的形式提供

public class DateStudy {
   
   
    public static void main(String[] args) {
   
   
        // 创建一个Calendar对象
        Calendar calendar = Calendar.getInstance();
        // 创建一个自定义时间的Date对象  
        Date customTime = new Date(2023,12,1);
        // 用自定义时间的Date对象设置Calendar的时间  
        calendar.setTime(customTime);
        System.out.println(calendar.getTime());        //Tue Jan 01 00:00:00 CST 3924
    }
}

long 类型入参

public class DateStudy {
   
   
    public static void main(String[] args) {
   
   
        // 创建一个Calendar对象
        Calendar calendar = Calendar.getInstance();
        // 定义一个long类型的时间参数,从2000毫秒后开始
        long time = System.currentTimeMillis() + 2000;
        // 用long类型的时间参数设置Calendar的时间
        calendar.setTimeInMillis(time);
        System.out.println(calendar.getTime());   // Tue Oct 17 18:24:09 CST 2023
    }
}

注:不同入参,设置时间时用不同方法
image.png

add

add方法用于在指定的时间字段中添加(或减少)指定的值。GIF 2023-10-17 18-32-00.gif

注意:
add方法的第一个参数是要修改的时间字段,Calendar提供一些默认的枚举值;例如,Calendar.DAY_OF_YEAR意味着你要修改年中的日期,Calendar.MONTH意味着你要修改月份,以此类推。
第二个参数是你要添加(或减少)的值。

set

日历类的set方法用于设置日历的各个字段,例如年、月、日、小时和分钟。

public class DateStudy {
   
   
    public static void main(String[] args) {
   
   
        // 创建一个Calendar对象
        Calendar calendar = Calendar.getInstance();

        // 设置日历的年份
        int year = 2023;
        calendar.set(Calendar.YEAR, year);

        // 设置日历的月份
        int month = 10;
        calendar.set(Calendar.MONTH, month - 1); // 注意,月份是从0开始的,所以要减1

        // 设置日历的日期
        int day = 23;
        calendar.set(Calendar.DAY_OF_MONTH, day);

        // 设置日历的小时和分钟
        int hours = 23;
        int minutes = 59;
        calendar.set(Calendar.HOUR_OF_DAY, hours);
        calendar.set(Calendar.MINUTE, minutes);

        // 输出设置后的日历时间
        System.out.println("设置后的日历时间为: " + calendar.getTime());
        // 设置后的日历时间为: Mon Oct 23 23:59:28 CST 2023
    }
}

LocalDate类

LocalDate类是Java 8引入的一个日期类,它表示一个特定的日期,包括年、月和日,但不包括时间。这个类提供了一系列的方法来操作和处理日期,如获取当前日期、增加或减少日期、比较日期等等。

实际上,java8还引入了其他和时间有关的类

  1. LocalDate:用于表示一个日期,包括年、月和日,但不包括时间时区信息
  2. LocalDateTime:用于表示一个日期和时间,包括年、月、日、小时、分钟、秒和毫秒,不包括时区信息。
  3. ZonedDateTime:用于表示一个日期和时间,包括年、月、日、小时、分钟、秒和毫秒,以及时区信息。

    这三个类都位于java.time包中,它们的设计旨在替换Java 8之前的Date和Calendar类,并提供更完善、更一致和更易于使用的日期和时间API。(ps:妈的,全是学习成本)

相关文章
|
4月前
|
前端开发 关系型数据库 MySQL
【前端学java】MySQL数据库的本地安装
【8月更文挑战第12天】MySQL数据库的本地安装
49 3
|
25天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
53 26
|
4月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(完结)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!(完结)
44 0
|
1月前
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
35 5
|
2月前
|
Java API
Java的日期类都是怎么用的
【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
50 14
|
3月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
56 3
|
3月前
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
4月前
|
开发框架 前端开发 Java
【前端学java】SpringBootWeb极速入门-实现一个简单的web页面01
【8月更文挑战第12天】SpringBootWeb极速入门-实现一个简单的web页面01
78 3
【前端学java】SpringBootWeb极速入门-实现一个简单的web页面01
|
4月前
|
设计模式 前端开发 Java
【前端学java】SpringBootWeb极速入门-分层解耦(03)
【8月更文挑战第13天】SpringBootWeb极速入门-分层解耦(03)
30 2
【前端学java】SpringBootWeb极速入门-分层解耦(03)
|
4月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
65 2
【前端学java】如何从前端视角快速学习Maven