Java中的日期和时间类以及Calendar类用法详解

Java中日期和时间类以及Calendar类用法详解

Java中有三个主要的日期时间类:Date、Calendar和SimpleDateFormat。在Java 8及以上版本中,还增加了新的日期时间API(即java.time包)。

1. Date类

日期类java.util.Date最初设计用于表示当前时间。Date自基准时间(1970年1月1日)以来的毫秒数存储日期和时间。

以下是Date类的例子,展示如何使用Date类来获取并打印出当前日期、时间。

import java.util.*;
public class DateExample {
    public static void main(String args[]) {
        Date date = new Date();
        System.out.println("Current date: "+date);
    }
}

上述代码运行后的输出结果为 :

Current date: Wed Jun 03 14:23:08 PDT 2020

但是从Java 8开始,官方不再推荐使用Date类。因此,在Java 8之前使用Date类,建议使用Calendar类。

2. Calendar类

Calendar(日历)类是一个抽象类,它提供了许多方法来操作日期和时间。它也给出了实例化为特定瞬间的方法。Calendar支持“秒”和“毫秒”粒度。

下面是Calendar类的一个例子,展示如何使用Calendar类来获取并打印出特定日期的日期、月份和年份:

import java.util.*;
public class CalendarExample {
    public static void main(String args[]) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2020);
        cal.set(Calendar.MONTH, Calendar.MAY);
        cal.set(Calendar.DAY_OF_MONTH, 16);
        System.out.println(
            "Calendar's Year: " + cal.get(Calendar.YEAR));
        System.out.println(
            "Calendar's Month: " + cal.get(Calendar.MONTH));
        System.out.println(
            "Calendar's Day of Month: " + cal.get(Calendar.DAY_OF_MONTH));
    }
}

上述代码运行后的输出结果为:

Calendar's Year: 2020
Calendar's Month: 4
Calendar's Day of Month: 16

这里需要注意,Calendar的月份以0开始,例如:0代表一月,1代表二月,以此类推。

3. SimpleDateFormat类

SimpleDateFormat类提供格式化和解析操作日期和时间。它允许指定自定义的日期格式符号来格式化日期时间。以下是一些常用日期格式符号:

符号 含义
yyyy 年份,例如:1998, 2020
MM 月份,例如:01,12
MMM 简写月份,例如:Jan,Dec
dd 两位数的日期,例如:01,31
E 星期几,例如:Sun, Mon, Tue...
HH 小时(24小时制),例如:00,23
hh 小时(12小时制),例如:00,12
mm 分钟,例如:00,59
ss 秒钟,例如:00,59
SSS 毫秒数,例如:234,543
z 时区,例如:GMT,UTC,CST

以下是SimpleDateFormat类的一个例子,展示如何使用不同的日期格式来展示日期:

import java.util.*;
import java.text.*;
public class SimpleDateFormatExample {
    public static void main(String args[]) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS zzz");
        System.out.println("当前时间是 : " + sdf.format(date));
    }
}

上述代码运行后的输出结果为:

当前时间是 : 2020-06-03 14:23:08.854 PDT

4. Java 8 新的日期时间API

Java 8新的日期API中,包括了java.time包,其中最常用的类为LocalDateTime。LocalDateTime类是线程安全的,因为它是不可变的。

下面是一个简单示例展示了如何使用LocalDateTime类获取并打印当前的日期和时间:

import java.time.LocalDateTime;

public class LocalDateTimeExample {
    public static void main(String[] args) {
        LocalDateTime currentDateTime = LocalDateTime.now();
        System.out.println("Current LocalDateTime: " + currentDateTime);
    }
}

上述代码运行后的输出结果为:

Current LocalDateTime: 2020-06-03T14:23:08.854

结论

在Java中处理日期和时间是非常重要的,因为几乎所有的程序都会在一定程度上使用这些东西。在使用日期和时间API时,请牢记它们的特点和使用方法。在Java 8及以上的版本中,新日期时间API已经几乎代替了旧的API。在处理日期和时间时,请始终使用最新的API。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中的日期和时间类以及Calendar类用法详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring Data JPA系列JpaSpecificationExecutor用法详解

    Spring Data JPA系列JpaSpecificationExecutor用法详解 JpaSpecificationExecutor介绍 JpaSpecificationExecutor是Spring Data JPA提供的一个接口,可以用于对JPA规范中Criteria Query查询标准的扩展,使得我们可以根据不同的查询条件,动态生成不同的查询语…

    Java 2023年5月20日
    00
  • Java中switch的三种用法方式小结

    下面是Java中switch的三种用法方式小结的详细讲解: 标准的switch语句 switch (expression) { case value1: // 如果expression的值等于value1,则执行此处代码 break; case value2: // 如果expression的值等于value2,则执行此处代码 break; default:…

    Java 2023年5月26日
    00
  • Java通过导出超大Excel文件解决内存溢出问题

    当处理超大规模的Excel文件时,Java很容易发生内存溢出的问题。这时候,最好的解决方案之一是通过导出Excel文件来减小内存使用量。以下是详细的攻略: 1. 使用Apache POI库 Apache POI是一个Java库,它提供了对许多Microsoft Office格式文件(如Excel、Word和PowerPoint)的读取和写入能力。在处理超大规…

    Java 2023年5月19日
    00
  • 浅谈SpringMVC HandlerInterceptor诡异问题排查

    下面来详细讲解如何排查 SpringMVC HandlerInterceptor 的诡异问题。 1. 确定问题 当我们在 SpringMVC 中使用 HandlerInterceptor 的时候,发现执行顺序有问题,拦截器不按照我们希望的顺序执行,或者是某个拦截器失效了。这个时候,我们首先需要确定问题的根源。 1.1 确定是哪个拦截器失效 我们可以通过在每个…

    Java 2023年5月25日
    00
  • 使用 Apache 反向代理的设置技巧

    下面我将为大家详细介绍使用 Apache 反向代理的设置技巧的完整攻略。 一、反向代理的基本概念 反向代理是一种代理模式,其代理对象不是客户端,而是服务端。它可以将多个 web 服务器虚拟为一个地址,以便统一代理。客户端访问这个地址,由反向代理服务器将请求转发到真正的服务器上去,并将响应返回给客户端。 反向代理的优点包括:- 可以在前端部署负载均衡;- 可以…

    Java 2023年6月2日
    00
  • Nginx配置跨域,覆盖后端服务跨域配置

    本篇文章主要介绍了,如何通过Nginx配置跨域,并覆盖后端服务跨域配置。 先看下后端代码跨域配置: 主要的目标是:不修改后端跨域配置代码,来实现Nginx跨域指定域名。 @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource urlBasedCorsConfig…

    Java 2023年4月23日
    00
  • Java利用Netty时间轮实现延时任务

    Java利用Netty时间轮实现延时任务 Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于网络编程、RPC等高并发场景。Netty提供了对时间轮数据结构的支持,我们可以基于时间轮实现延时任务功能,本文将详细介绍如何利用Netty时间轮实现延时任务。 时间轮数据结构 时间轮是一种定时器管理方式,将所有的定时器事件按照时间分配到不同的槽中,形成一个…

    Java 2023年5月20日
    00
  • 品味布隆过滤器的设计之美

    布隆过滤器是一个精巧而且经典的数据结构。 你可能没想到: RocketMQ、 Hbase 、Cassandra 、LevelDB 、RocksDB 这些知名项目中都有布隆过滤器的身影。 对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。来吧,我们一起品味布隆过滤器的设计之美。 1 缓存穿透 我们先来看一个商品服务查询详情的接口: public Prod…

    Java 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部