在我们以往的编程中,就有过通过运行前和运行后时间差来判断时间复杂度的例子,再扯得远一点,我们在C语言中制造随机数的操作,也要用到有关时间的函数。而且,在我们未来的编程中,也会时不时要用到能够读取当前时间的方法,所以,本篇博文所讲解的类,其实还是挺常用的,所以本人专门写一篇博文来为同学们展示下这个类的常用方法的用法

System类:

概述

System 类包含一些有用的类字段和方法。它不能被实例化

说真的,System类与时间相关的主要原因就是它的一个方法,那么,现在,本人来展示下这个类的常用API吧:

  • public static void gc()

    调用垃圾回收器
  • public static void exit(int status)

    退出java虚拟机 0 为正常退出 非0为 异常退出
  • public static long currentTimeMillis()

    获取当前时间的毫秒值

至于控制台的 录入和输出 本人就不在这里描述了,想必大家都清楚。

那么,本人在这里就不啰嗦了。

下面本人就来介绍真正用于处理时间的两个类——Date类 、SimpleDateFormat类 与 Calendar类:

Date类:

概述:

类 Date 表示特定的瞬间,精确到毫秒

首先,本人来展示下构造方法

  • public Date()
  • public Date(long date)

    把一个long类型的毫秒值转换成一个日期对象

这个类我们主要运用它的两个方法 —— getTime() 与 setTime(long time):

  • public long getTime():

    获取一个日期对象对象毫秒值
  • public void setTime(long time):

    给一个日期对象设置上指定的毫秒值 例:date.setTime(1000 * 60 * 60) ;

接下来就是 SimpleDateFormat类

SimpleDateFormat类:

概述:

可以把一个日期对象格式化成一个文本(字符串) ,

也可以把一个日期字符串解析成一个日期对象

构造方法:

  • public SimpleDateFormat():

    使用默认的模式来创建一个SimpleDateFormat对象
  • public SimpleDateFormat(String pattern):

    使用指定的模式(规则比如yyyy:MM:dd HH:mm:ss)来创建一个SimpleDateFormat对象

规则的定义:

  • y ======== 年
  • M ======== 月
  • d ======== 天
  • H ======== 时
  • m ======== 分
  • s ======== 秒

成员方法:

  • public String format(Date date):

    把一个日期对象格式化成一个字符串
  • public Date parse(String dateStr):

    把一个日期字符串解析成一个日期对象 注意要以指定格式解析

接下来就是本篇博文中最为重要的 Calendar类

Calendar类:

成员方法:

  • static Calendar getInstance()

    使用默认时区和语言环境获得一个日历。
  • static Calendar getInstance(Locale aLocale)

    使用默认时区和指定语言环境获得一个日历。
  • static Calendar getInstance(TimeZone zone)

    使用指定时区和默认语言环境获得一个日历。
  • static Calendar getInstance(TimeZone zone, Locale aLocale)

    使用指定时区和语言环境获得一个日历。
  • public void add(int field,int amount)

    根据日历的规则,为给定的日历字段添加或减去指定的时间量
  • public final void set(int year,int month,int date)

    设置日历时间 年月日
  • boolean after(Object when)

    判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。
  • boolean before(Object when)

    判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。
  • void clear()

    将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
  • void clear(int field)

    将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
  • Object clone()

    创建并返回此对象的一个副本。
  • int compareTo(Calendar anotherCalendar)

    比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。
  • protected void complete()

    填充日历字段中所有未设置的字段。
  • protected abstract void computeFields()

    将当前毫秒时间值 time 转换为 fields[] 中的日历字段值。
  • protected abstract void computeTime()

    将 fields[] 中的当前日历字段值转换为毫秒时间值 time。
  • boolean equals(Object obj)

    将此 Calendar 与指定 Object 比较。
  • int get(int field)

    返回给定日历字段的值。
  • int getActualMaximum(int field)

    给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。
  • int getActualMinimum(int field)

    给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值。
  • static Locale[] getAvailableLocales()

    返回所有语言环境的数组,此类的 getInstance 方法可以为其返回本地化的实例。
  • String getDisplayName(int field, int style, Locale locale)

    返回给定 style 和 locale 下的日历 field 值的字符串表示形式。
  • Map<String,Integer> getDisplayNames(int field, int style, Locale locale)

    返回给定 style 和 locale 下包含日历 field 所有名称的 Map 及其相应字段值。
  • int getFirstDayOfWeek()

    获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。
  • abstract int getGreatestMinimum(int field)

    返回此 Calendar 实例给定日历字段的最高的最小值。
  • abstract int getLeastMaximum(int field)

    返回此 Calendar 实例给定日历字段的最低的最大值。
  • abstract int getMaximum(int field)

    返回此 Calendar 实例给定日历字段的最大值。
  • int getMinimalDaysInFirstWeek()

    获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。
  • abstract int getMinimum(int field)

    返回此 Calendar 实例给定日历字段的最小值。
  • Date getTime()

    返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
  • long getTimeInMillis()

    返回此 Calendar 的时间值,以毫秒为单位。
  • TimeZone getTimeZone()

    获得时区。
  • int hashCode()

    返回该此日历的哈希码。
  • protected int internalGet(int field)

    返回给定日历字段的值。
  • boolean isLenient()

    判断日期/时间的解释是否为宽松的。
  • boolean isSet(int field)

    确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况。
  • abstract void roll(int field, boolean up)

    在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。
  • void roll(int field, int amount)

    向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。
  • void set(int field, int value)

    将给定的日历字段设置为给定值。
  • void set(int year, int month, int date, int hourOfDay, int minute)

    设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
  • void set(int year, int month, int date, int hourOfDay, int minute, int second)

    设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。
  • void setFirstDayOfWeek(int value)

    设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。
  • void setLenient(boolean lenient)

    指定日期/时间解释是否是宽松的。
  • void setMinimalDaysInFirstWeek(int value)

    设置一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则使用值 1 调用此方法。
  • void setTime(Date date)

    使用给定的 Date 设置此 Calendar 的时间。
  • void setTimeInMillis(long millis)

    用给定的 long 值设置此 Calendar 的当前时间值。
  • void setTimeZone(TimeZone value)

    使用给定的时区值来设置时区。
  • String toString()

    返回此日历的字符串表示形式。

那么,这个类,本人打算主要通过代码来进行讲解:

在本篇博文中,本人打算讲解日历类的三种用法:

我们现在来展示第一种显示时间的 步骤:

package com.mec.study;

import java.util.Calendar;

public class AboutCalendar {

	public static void main(String[] args) {
//给today申请空间,并将其成员赋值为当前时间
Calendar today = Calendar.getInstance();
//这个数组就是本人在《数据结构与算法》专栏中多次讲到的,可以替代多重if-elseif语句的算法
String week[] = {"日", "一", "二", "三", "四", "五", "六"}; int year = today.get(Calendar.YEAR);
int month = today.get(Calendar.MONTH);
int date = today.get(Calendar.DATE);
int hour = today.get(Calendar.HOUR_OF_DAY) ;
int minute = today.get(Calendar.MINUTE);
int second = today.get(Calendar.SECOND);
int day = today.get(Calendar.DAY_OF_WEEK); //这里要提醒的两点是:1.月份是按照从0开始记录的,所以我们在输出时要“加一”
// 2.周内天数从1开始,并且默认周日是第一天
System.out.println("现在本机时间为:" + year + "年" + (month+1) + "月" + date + "日 的" + hour + "时" + minute + "分" + second + "秒" + " 周" + week[day-1]);
} }

可以看到,我们通过代码显示的时间 和 Eclipse自动显示的时间一模一样,可见,我们的代码是正确的。

那么,现在我们来展示第二种显示时间 的步骤:

package com.mec.study;

import java.text.SimpleDateFormat;

import java.util.Calendar;

public class AboutCalendar {

	public static void main(String[] args) {
Calendar today = Calendar.getInstance(); //这里的 SimpleDateFormat类 可以用来取代Calendar类,但是操作略有不同
//若我们年前写的是两个y,则输出的将是19(因为现在是2019年),月前M必须大写,以便和分钟的m区别开
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd - HH:mm:ss");
String s =sdf.format(today.getTime()); System.out.println(s);
} }

可以看到,我们通过代码显示的时间 和 Eclipse自动显示的时间一模一样,可见,我们的代码是正确的。

现在,本人来展示第三种用途:

例如,我们现在想知道某一年某一个月最多有多少天:

package com.mec.study;

import java.text.SimpleDateFormat;

import java.util.Calendar;

public class AboutCalendar {

	public static void main(String[] args) {
Calendar today = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd - HH:mm:ss"); today.set(2020, 2, 0);
int maxDate = today.get(Calendar.DATE);
System.out.println(maxDate);
} }

我拿2020年2月进行测试,录入年份为2020,月份为3月(之前说过,月份从0开始记录),日期记为0。

等等,之前不是说日期是从1开始记的吗?

对,没错,就是从1开始记录,而我们现在访问它3月的第0天,就相当于访问它2月的最后一天!!!

我们正是可以通过这个方法来得到某年某月的最高天数(这点在我们之后代码中与泛类的联合应用中的作用会显著体现)

就像本人前几篇博文说的一样,Java给我们提供给的类的方法是非常多的,本人就不一 一进行讲解了,还是那句话:师傅领进门,修行在个人。加油吧,同学们!

处理时间的类 —— System类、Date类 、SimpleDateFormat类 与 Calendar类的更多相关文章

  1. 关于用Date类计算活了多少天和用Calendar类计算闰年的demo

    在javaSE阶段,Date类和Calendar类以后会经常用到 这两个类当中的一些常用方法 通过两个demo 进行学习和练习 第一个要求如下:让用户自己输入yyyy-MM-dd 格式的年月日 然后得 ...

  2. Calendar类介绍_获取对象的方式和Calendar类的常用成员方法

    java.util.Calendar类:日历类 Calendar类是一个抽象类,里边提供了很多操作日历字段的方法(YEAR.MONTH.DAY_OF_MONTH.HOUR ) Calendar类无法直 ...

  3. Calendar类介绍_获取对象的方式和Calendar类的常用成员方式

    java.util.Calendar是日历类,在Date后出现,替换掉了许多Date方法.该类将所有可能用到的时间信息封装为静态成员变量,方便获取.日历类就是方便获取各个时间属性的. Calendar ...

  4. [常用类]时间内Date、SimpleDateFormat、Calendar类

    Date类的概述是util包下的,不能导入sql包的.* 类 Date 表示特定的瞬间,精确到毫秒. *构造方法 * public Date() * public Date(long date) 如果 ...

  5. Java.util 包(Date 类、Calendar类、Random类)

    java.util 包提供了一些实用的方法和数据结构. Date 类 Date 类表示日期和时间,里面封装了操作日期和时间的方法.Date 类经常用来获取系统当前时间. 构造方法: 构造方法 说明 D ...

  6. Java学习关于时间操作的应用类--Date类、Calendar类及其子类

    Date类 Date类封装了当期时间和日期.与Java1.0定义的原始版的Date类相比,Date类发生了本质的变化.在Java1.1发布时,原始版Date类定义的许多功能被移进Calendar类和D ...

  7. JAVA集合类简要笔记 - 内部类 包装类 Object类 String类 BigDecimal类 system类

    常用类 内部类 成员内部类.静态内部类.局部内部类.匿名内部类 概念:在一个类的内部再定义一个完整的类 特点: 编译之后可生成独立的字节码文件 内部类可直接访问外部类私有成员,而不破坏封装 可为外部类 ...

  8. Java api 入门教程 之 JAVA的Date类与Calendar类

    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理. 一.这里简单介绍一下Date类的使 ...

  9. JAVA的Date类与Calendar类【转】

    Date类 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理.这里简单介绍一下Date ...

  10. JAVA Date类与Calendar类【转】

    Date类 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理.这里简单介绍一下Date ...

随机推荐

  1. MySQL优化之执行计划

    前言 研究SQL性能问题,其实本质就是优化索引,而优化索引,一个非常重要的工具就是执行计划(explain),它可以模拟SQL优化器执行SQL语句,从而让开发人员知道自己编写的SQL的运行情况. 执行 ...

  2. 深度学习框架Keras与Pytorch对比

    对于许多科学家.工程师和开发人员来说,TensorFlow是他们的第一个深度学习框架.TensorFlow 1.0于2017年2月发布,可以说,它对用户不太友好. 在过去的几年里,两个主要的深度学习库 ...

  3. 【springmvc thymeleaf】springmvc整合thymeleaf

    概述 Thymeleaf提供了一组Spring集成,使您可以将其用作Spring MVC应用程序中JSP的全功能替代品. 这些集成将使您能够: @Controller像使用JSP一样,将Spring ...

  4. A 修公路

    时间限制 : - MS   空间限制 : 65536 KB  评测说明 : 时限1000ms 问题描述 某岛国有n个小岛构成(编号1到n),该国政府想要通过n-1条双向公路将这些小岛连接起来,使得任意 ...

  5. 人工智能新手入门学习路线和学习资源合集(含AI综述/python/机器学习/深度学习/tensorflow)

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![握手][握手] 1. 分享个人对于人工智能领域的算法综述:如果你想开始学习算法,不妨先了解人工 ...

  6. stm32:简单按键输入实现

    开发环境keil4,芯片STM32F103C8T6 1.main.c //串口实验 #include "sys.h" #include "delay.h" #i ...

  7. Linux命令后面加 & 的作用

    在命令的后面加一个 & 的作用是,将这个任务放到后台执行.看下面的例子. 输入gedit回车,可以看到,打开了Linux的文本编辑器,但是命令窗口执行不了其他命令了,只有退出文本编辑器才能继续 ...

  8. 1017 Queueing at Bank (25 分)

    Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...

  9. C++不被继承的内容

    C++不被继承的内容 派生类会继承基类所有的方法和变量,除了: 构造函数,析构函数 重载运算符 友元函数 注意,私有成员是被继承了的,只是无法访问.我们可以通过sizeof判断出来.下面附一张清晰的图

  10. Vulnhub DC-2靶机渗透

    信息搜集 nmap扫描端口 nmap -sV 192.168.146.140 -p1-10000 开了80端口,那就直接访问一下把.(7744端口是ssh端口,之后会用到) 输入ip,发现url处变成 ...