首页 > 其他分享 >日期时间类

日期时间类

时间:2024-08-05 14:10:00浏览次数:8  
标签:格式化 SimpleDateFormat 日期 时间 Date Calendar

日期时间类

一.Date类(日期时间)

在Java中,Date 类是java.util包的一部分,用于表示一个特定的瞬间,精确到毫秒。然而,需要注意的是,Date 类本身并不包含任何时区信息,它仅仅表示自“Unix纪元”(即1970年1月1日 00:00:00 GMT)以来的毫秒数。因此,当你创建一个Date对象时,它实际上表示的是从那个时间点开始的毫秒数,而不是一个具体的日期和时间(除非在特定的上下文中解释,比如使用SimpleDateFormat来格式化它)。

然而,由于Date类设计上的不足(比如它的大多数方法都已经被弃用),从Java 8开始,推荐使用新的日期时间API,即java.time包下的类,比如LocalDateLocalTimeLocalDateTimeZonedDateTime等,这些类提供了更好的日期时间处理能力,包括时区支持、不可变性以及更好的设计。

使用Date

尽管Date类现在不被推荐用于新的开发,但了解其基本用法仍然是有益的。

import java.util.Date;  
  
public class Main {  
    public static void main(String[] args) {  
        // 创建一个Date对象,表示当前时间  
        Date now = new Date();  
          
        // 打印Date对象,默认调用toString()方法,显示的是从1970年1月1日 00:00:00 GMT到现在的毫秒数  
        System.out.println("当前时间: " + now);  
          
        // 注意:由于Date类不包含时区信息,因此上述输出在不同的时区看起来都是一样的,  
        // 但实际上,它表示的是自Unix纪元以来的毫秒数,在不同的时区下解释这个值会得到不同的日期和时间。  
    }  
}

使用新的日期时间API

从Java 8开始,建议使用java.time包下的类来处理日期和时间。

import java.time.LocalDateTime;  
import java.time.format.DateTimeFormatter;  
  
public class Main {  
    public static void main(String[] args) {  
        // 获取当前日期和时间  
        LocalDateTime now = LocalDateTime.now();  
          
        // 使用DateTimeFormatter来格式化日期时间  
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");  
        String formattedDateTime = now.format(formatter);  
          
        // 打印格式化后的日期时间  
        System.out.println("当前时间: " + formattedDateTime);  
    }  
}

在这个例子中,LocalDateTime 类用于获取当前的日期和时间(不包含时区信息),然后使用DateTimeFormatter来将日期时间格式化为字符串。这种方式比使用Date类更加灵活和强大。

二.SimpleDateFormat类(格式化)

SimpleDateFormat 类是 Java 中用于格式化和解析日期的类,它属于 java.text 包。这个类允许你进行日期-文本的转换,即你可以将 Date 对象格式化为可读的字符串,也可以将符合特定模式的字符串解析回 Date 对象。

使用 SimpleDateFormat 格式化日期

当你想要将 Date 对象转换成一种特定格式的字符串时,SimpleDateFormat 非常有用。你可以通过定义一个模式字符串来指定你想要的日期时间格式。

import java.text.SimpleDateFormat;  
import java.util.Date;  
  
public class Main {  
    public static void main(String[] args) {  
        // 创建一个Date对象  
        Date date = new Date();  
  
        // 创建SimpleDateFormat对象并定义日期时间格式  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  
        // 将Date对象格式化为字符串  
        String formattedDate = sdf.format(date);  
  
        // 打印格式化后的日期时间  
        System.out.println("格式化后的日期时间: " + formattedDate);  
    }  
}

在这个例子中,"yyyy-MM-dd HH:mm:ss" 是日期时间的模式字符串,其中:

  • yyyy 表示四位年份
  • MM 表示两位月份
  • dd 表示两位日期
  • HH 表示小时(24小时制)
  • mm 表示分钟
  • ss 表示秒

使用 SimpleDateFormat 解析日期字符串

除了格式化日期外,SimpleDateFormat 还可以用来将符合特定模式的字符串解析为 Date 对象。

import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
public class Main {  
    public static void main(String[] args) {  
        String dateString = "2023-10-01 12:30:45";  
  
        // 创建SimpleDateFormat对象并定义日期时间格式  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  
        try {  
            // 将字符串解析为Date对象  
            Date date = sdf.parse(dateString);  
  
            // 打印解析后的Date对象(注意:这里直接打印Date对象会显示时间戳,为了清晰,你可以再次格式化它)  
            System.out.println("解析后的日期时间(时间戳): " + date);  
  
            // 如果你想要打印更友好的格式,可以再次使用SimpleDateFormat格式化  
            String formattedDate = sdf.format(date);  
            System.out.println("解析后的日期时间(格式化): " + formattedDate);  
  
        } catch (ParseException e) {  
            e.printStackTrace();  
            // 如果字符串不符合定义的模式,将会抛出ParseException  
        }  
    }  
}

在这个例子中,我们首先定义了一个符合 "yyyy-MM-dd HH:mm:ss" 模式的字符串 dateString,然后使用 SimpleDateFormatparse 方法将其解析为 Date 对象。注意,如果字符串的格式与 SimpleDateFormat 对象的模式不匹配,将会抛出 ParseException

三.Calendar类(日历)

Calendar类是Java中用于处理日期和时间的抽象类,它提供了许多方法来获取和设置日期、时间以及执行日期和时间的计算操作。以下是对Calendar类的详细介绍:

一、Calendar类概述

Calendar类是一个抽象类,不能直接实例化。要获取Calendar对象,需要通过调用其静态方法getInstance()。这个方法会根据当前的时间和默认的时区返回一个Calendar实例,该实例默认由当前时间初始化。

二、主要功能和方法

  1. 获取日期和时间

    Calendar类提供了多种方法来获取年、月、日、小时、分钟、秒等日期和时间的具体值。例如,get(int field)方法通过传入一个静态常量(如Calendar.YEARCalendar.MONTH等)来获取对应的值。需要注意的是,月份是从0开始的,即0代表一月,所以在获取月份时通常需要加1。

  2. 设置日期和时间

    可以使用set(int field, int value)方法来设置Calendar对象的日期和时间。这个方法接受两个参数:第一个参数是要设置的字段(如年、月、日等),第二个参数是要设置的值。例如,calendar.set(Calendar.YEAR, 2023)会将年份设置为2023。

  3. 日期和时间的计算

    Calendar类还提供了add(int field, int amount)方法,用于在日期和时间上添加或减少指定的时间量。例如,calendar.add(Calendar.DAY_OF_MONTH, 1)会在当前日期上增加一天。

  4. 日期和时间的比较

    虽然Calendar类本身没有直接提供比较两个日期的方法,但可以通过getTime()方法将Calendar对象转换为Date对象,然后使用Date类的compareTo()方法或equals()方法来比较两个日期。

  5. 日期和时间的格式化

    虽然Calendar类本身不直接提供格式化功能,但可以将Calendar对象转换为Date对象,然后使用SimpleDateFormat类来格式化日期和时间。

三、注意事项

  1. 月份从0开始:在使用Calendar类时,需要注意月份是从0开始的,即0代表一月,1代表二月,依此类推。
  2. 时区问题:Calendar类是与时区相关的,默认使用系统时区。如果需要处理不同时区的日期和时间,可以使用TimeZone类来设置时区。
  3. 线程安全问题:Calendar类的实例是可变的,并且不是线程安全的。如果在多线程环境中使用Calendar对象,需要采取适当的同步措施。

四、示例代码

以下是一个简单的示例,展示了如何使用Calendar类来获取和设置日期和时间:

import java.util.Calendar;  
  
public class CalendarExample {  
    public static void main(String[] args) {  
        // 获取Calendar实例  
        Calendar calendar = Calendar.getInstance();  
  
        // 获取当前年份  
        int year = calendar.get(Calendar.YEAR);  
        // 获取当前月份(需要加1)  
        int month = calendar.get(Calendar.MONTH) + 1;  
        // 获取当前日期  
        int date = calendar.get(Calendar.DAY_OF_MONTH);  
  
        // 打印当前日期  
        System.out.println("当前日期: " + year + "年" + month + "月" + date + "日");  
  
        // 设置日期和时间  
        calendar.set(Calendar.YEAR, 2024);  
        calendar.set(Calendar.MONTH, Calendar.OCTOBER); // 月份使用常量表示,不需要加1  
        calendar.set(Calendar.DAY_OF_MONTH, 1);  
  
        // 打印设置后的日期  
        System.out.println("设置后的日期: " + calendar.getTime());  
    }  
}

请注意,上述代码中的Calendar.OCTOBER是一个静态常量,用于表示十月,这样可以避免直接使用数字可能导致的混淆。

标签:格式化,SimpleDateFormat,日期,时间,Date,Calendar
From: https://www.cnblogs.com/yhy373286277/p/18343072

相关文章

  • 量子计算时间线2000-2010
    Reference同《量子计算时间线1968-1999》2000ArunK.PatiandSamuelL.Braunsteinprovethequantumno-deletingtheorem.Thisisdualtotheno-cloningtheoremwhichshowsthatonecannotdeleteacopyofanunknownqubit.Togetherwiththestrongerno......
  • js获取未来n天的时间并返回是否是今天,日期yyyy-mm-dd和星期
    js获取未来n天的时间.md2024.02.02(今天)如果传入5则获取未来5天的时间数组[ {date:"2024-02-02,"isToday:true,week:"星期五"}, {date:"2024-02-03,"isToday:false,week:"星期六"}, {date:"2024-02-04,"isToday:false,week:"星期日"......
  • el-slider实现一个能拖动的时间范围选择器
    el-slider实现一个能拖动的时间范围选择器<template><divstyle="width:200px"><el-sliderv-model="workTime":step="5":max="1435":marks="marks":format-tooltip="f......
  • el-date-picker周选择器获取选择的日期范围
    el-date-picker周选择器获取选择的日期范围<el-date-pickerv-model="formData.date"type="week"format="yyyy第WW周"placeholder="选择周"@change="weekChange"&......
  • el-date-picker月选择器获取选择的日期范围
    el-date-picker月选择器获取选择的日期范围<el-date-pickerv-model="monthValue"type="month"placeholder="选择月"value-format="yyyy-MM-dd"@change="monthChange"......
  • LeetCode 136场双周赛 Q4. 标记所有节点需要的时间
    这道题也是一道比较经典的树形dp模板题;太久没写了,赛时一眼就想到了,但是敲的时候摸索了半天,还是没敲出来;首先看题目,需要求出无向树上从每个节点为树根节点到其他所有节点中最长路径的值,然后每条边的距离其实就是,如果目的地是奇数距离为1,目的地是偶数距离为2那么这个逻辑很简单,其......
  • 如何利用AI工具延长摸鱼时间、准点下班?
    你好同学,我是沐爸,欢迎点赞、收藏和关注!个人知乎、公众号"沐爸空间"俗话说,不会摸鱼的程序猿不是好的程序猿。同学,你是不是也在为不能准点下班、每天加班、没有时间提升自己而烦恼?接下来,我们一起来了解下这款AI工具是什么,最重要的是怎么使用,怎么让我们开发效率提升,从而延......
  • 对齐两个或多个独立时间序列的时间范围
    我有几个属于同一时间范围但采样率不同的时间序列。所有系列的开始和结束时间都相同。series_a_times=['2023-01-01','2023-01-03','2023-01-04','2023-01-08']series_b_times=['2023-01-01','2023-01-04','2023-01-04','20......
  • 通过套接字将子进程输出按时间线逐行发送到前端失败
    这是我的代码:defenqueue_output(file,queue):forlineiniter(file.readline,''):queue.put(line)file.close()defread_popen_pipes(p):withThreadPoolExecutor(2)aspool:q_stdout,q_stderr=Queue(),Queue()......
  • linux下时间时区详解
    首先我们要明白,“时间”和“时区”是两个东西。时间是指从某个时间点开始到另一个时间点经过的“长度”,是“纵向”距离,一般在linux系统内有两个主要的时间,一是始于1970年(unix元年)至今的距离,二是系统启动后至今的距离。前者一般是由不断电的硬件维护(RTC)或者其他专门服务器......