Java时间相关内容学习(1) Calendar

Java 操作日期/时间,往往会涉及到Calendar,Date,DateFormat这些类。

最近决定把这些内容系统的整理一下,这样以后使用的时候,会更得心应手。本章的内容是主要讲解“Java时间框架”以及“类Calendar”。

在学习Calendar类时,我们先对它有个整体认识,心中建立一个框架,然后再通过示例学习如何使用它。

Java 时间架构图

Java 的Calendar, Date和DateFormat的关系图如下:

说明:

(01) milliseconds 表示毫秒。

milliseconds = “实际时间” - “1970-01-01 00:00:00”。Calendar 和 Date依赖于 milliseconds,从而表示时间。

(02) Calendar表示日期/时间。

它是一个抽象类,依赖于milliseconds。GregorianCalendar是Calendar的子类,通常我们通过Calendar.getInstance() 获取Calendar实例时,实际上返回的是 GregorianCalendar 对象。

Calendar和Locale关联,而Locale代表区域;Locale的值不同时,Calendar的日期/时间也不同。

Calendar和TimeZone关联,而TimeZone代表时区;不同的时区,Calendar的日期/时间也不同。

(03) Date 表示日期/时间。

它也依赖于 milliseconds实现。

在 JDK 1.1 之前,通常是通过Data操作“年月日时分秒”。不过,由于Date的相关 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类来操作“年月日时分秒”,同时可以通过 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。

(04) DateFormat是格式化/解析“日期/时间”的工具类。

它是Date的格式化工具,它能帮助我们格式化Date,进而将Date转换成我们想要的String字符串供我们使用。

它是一个抽象类。通常,我们通过getInstance(), getDateInstance()和getDateTimeInstance() 等获取DateFormat实例时;实际上是返回的SimpleDateFormat对象。

Calendar 介绍

Calendar 定义

publicabstractclass Calendar implements Serializable, Cloneable, Comparable<Calendar> {}

Calendar 是一个抽象类。

它的实现,采用了设计模式中的工厂方法。表现在:当我们获取Calendar实例时,Calendar会根据传入的参数来返回相应的Calendar对象。获取Calendar实例,有以下两种方式: 1) 当我们通过 Calendar.getInstance() 获取日历时,默认的是返回的一个GregorianCalendar对象。    GregorianCalendar是Calendar的一个实现类,它提供了世界上大多数国家/地区使用的标准日历系统。 2) 当我们通过 Calendar.getInstance(TimeZone timezone, Locale locale) 或 Calendar.getInstance(TimeZone timezone) 或 Calendar.getInstance(Locale locale)获取日历时,是返回“对应时区(zone) 或 地区(local)等所使用的日历”。    例如,若是日本,则返回JapaneseImperialCalendar对象。

参考如下代码:

public static Calendar getInstance()
{
    // 调用createCalendar()创建日历
    Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
    cal.sharedZone = true;
    return cal;
}

public static Calendar getInstance(TimeZone zone)
{
    // 调用createCalendar()创建日历
    return createCalendar(zone, Locale.getDefault());
}

public static Calendar getInstance(Locale aLocale) {
    // 调用createCalendar()创建日历
    Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale);
    cal.sharedZone = true;
    return cal;
}

public static Calendar getInstance(TimeZone zone,
                   Locale aLocale)
{
    // 调用createCalendar()创建日历
    return createCalendar(zone, aLocale);
}

private static Calendar createCalendar(TimeZone zone,
                   Locale aLocale)
{
    // (01) 若地区是“th”,则返回BuddhistCalendar对象
    // (02) 若地区是“JP”,则返回JapaneseImperialCalendar对象
    if ("th".equals(aLocale.getLanguage())
        && ("TH".equals(aLocale.getCountry()))) {
        return new sun.util.BuddhistCalendar(zone, aLocale);
    } else if ("JP".equals(aLocale.getVariant())
       && "JP".equals(aLocale.getCountry())
       && "ja".equals(aLocale.getLanguage())) {
        return new JapaneseImperialCalendar(zone, aLocale);
    }        

    // (03) 否则,返回GregorianCalendar对象
    return new GregorianCalendar(zone, aLocale);
}

当我们获取Calendar实例之后,就可以通过Calendar提供的一些列方法来操作日历。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索日历
, timezone
, calendar
, 时间
, getinstance
, java calendar
, locale
, java日期工具类
, java格式化时间
, GregorianCalendar
, java获取该年月
, 日历类
, Calendar对象
date获取年月日
,以便于您获取更多的相关知识。

时间: 2024-09-13 13:56:04

Java时间相关内容学习(1) Calendar的相关文章

Java时间相关内容学习(2) 自己封装的Calendar接口

本章主要是收藏一些常用的类和接口,包括:万年历(农历.阳历节日.阴历节日).自定义的Calendar接口. 万年历 源码如下(ChineseCalendar.java): package com.via.mce.monthcalendar.utils; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; /** * 农历日历.

Java时间相关内容学习(3) Date

本章主要介绍Date类,并通过示例学习如何使用它.最后,讲解一下UTC.GMT和时区的关系. Date 介绍 Date 定义 public class Date implements java.io.Serializable, Cloneable, Comparable<Date> {} Date 是表示时间的类. 一个Date对象表示一个特定的瞬间,能精确到毫秒.我们可以通过这个特定的瞬间,来获取到Date对应的"年.月.日.时.分.秒".反之亦然,我们也可以通过设置Da

Java时间相关内容学习(6) Locale介绍

本章介绍Locale. 1 Locale 介绍 Locale 表示地区.每一个Locale对象都代表了一个特定的地理.政治和文化地区. 在操作 Date, Calendar等表示日期/时间的对象时,经常会用到:因为不同的区域,时间表示方式都不同. 下面说说Locale对象的3种常用创建方式. 1 获取默认的Locale 使用方法: Locale locale = Locale.getDefault() 2 直接使用Locale的静态对象 Locale.java中提供了以下静态对象 public

Java时间相关内容学习(4) DateFormat

本章主要介绍DateFormat. DateFormat 介绍 DateFormat 的作用是 格式化并解析"日期/时间".实际上,它是Date的格式化工具,它能帮助我们格式化Date,进而将Date转换成我们想要的String字符串供我们使用 不过DateFormat的格式化Date的功能有限,没有SimpleDateFormat强大:但DateFormat是SimpleDateFormat的父类.所以,我们先对DateFormat有个整体了解,然后再学习SimpleDateForm

Java时间相关内容学习(7) TimeZone简介

本章介绍TimeZone. TimeZone 简介 TimeZone 表示时区偏移量,也可以计算夏令时. 在操作 Date, Calendar等表示日期/时间的对象时,经常会用到TimeZone:因为不同的时区,时间不同. 下面说说TimeZone对象的 2种常用创建方式. 1 获取默认的TimeZone对象 使用方法: TimeZone tz = TimeZone.getDefault() 2 使用 getTimeZone(String id) 方法获取TimeZone对象 使用方法: //

Java时间相关内容学习(5) SimpleDateFormat介绍

介绍SimpleDateFormat. SimpleDateFormat 介绍 SimpleDateFormat 是一个格式化Date 以及 解析日期字符串 的工具.它的最常用途是,能够按照指定的格式来对Date进行格式化,然后我们使用可以格式化Date后得到的字符串. 更严格的说,SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本).解析(文本 -> 日期)和规范化. SimpleDateFormat的构造函数: //

Java架构师学习之路

Java架构师,首先得是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得jvm能让你写出性能更好的代码;池技术:什么对象池,连接池,线程池-- Java反射技术,写框架必备的技术,但是有严重的性能问题,替代方案java字节码技术;nio,没什么好说的,值得注意的是"直接内存"的特点,使用场景;java多线程同步异步;java各种集合对象的实现原理,了解这些可以让你在解决问题时选择合适的数据结构,高效的解决问题,比如hashmap的实现原理,好

给予Java初学者的学习路线建议

Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍.这一部分的内容,同样适用于一些希望转行到Java的同学. 在大家看之前,我要先声明两点. 1.由于我本人是Java后端开发出身,因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可,切勿照

Java中jqGrid 学习笔记整理——进阶篇(二)_java

相关阅读: Java中jqGrid 学习笔记整理--进阶篇(一) 本篇开始正式与后台(java语言)进行数据交互,使用的平台为 JDK:java 1.8.0_71 myEclisp 2015 Stable 2.0 Apache Tomcat-8.0.30 Mysql 5.7 Navicat for mysql 11.2.5(mysql数据库管理工具) 一.数据库部分 1.创建数据库 使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍) 2. 2.创建表 双击打