日期时间类:Date类 日期时间格式化(DateFormat类) Calendar类

日期时间类

Date类

注:以下介绍的Date都在java.util包下,除此之外,java.sql包下也有此类,不要混淆

构造方法

  1. Date():分配Date对象并初始化此对象,以表示分配他的时间(精确到毫秒)

  2. Date(long date):分配Date对象并初始化此对象,以表示自标准基准时间(即1970年1月1日00:00:00GMT)起指定毫秒数Date后的时间

使用第二种构造方法要先创建一个Date对象

//在此之前要导入Date类
import java.util.Date;

long t=System.currentTimeMillis();
Date date = new Date(t);

注:使用Date对象用的是long

Date类的常用方法和说明

方法 说明
after(Date when) 测试当前日期是否在指定日期之后
before(Date when) 测试当前日期是否在指定日期之前
getTime() 获得自1970年1月1日00:00:00GMT起到现在所经过的毫秒数
setTime(long time) 设置当前Date对象所表示的日期时间值,该值用以表示1970年1月1日00:00:00GMT以后time毫秒的时间点

获取当前日期和时间

import java.util.Date;

public static void main(String[] args) {
        Date date = new Date();
        long value= date.getTime();//获得毫秒数
        System.out.println("日期:"+date);
        System.out.println("到现在所经历的毫秒数是:"+value);
    }
    /*
    日期:Sat Sep 04 18:44:19 CST 2021
    到现在所经历的毫秒数是:1630752259575
     */

日期时间格式化(DateFormat类)

格式化风格有以下4种

(以2021年9月2日举例)

SHORT:完全为数字

MEDIUM:较长

LONG:更长

FULL:完全指定

要格式化日期,首先要创建DateFormat对象,因为他是抽象类,所以可以用getDateInstance()进行创建

DateFormat d=DateFormat.getDateInstance();

此类常用方法和说明

方法 说明
format() 将一个Date对象实例格式化为日期/时间字符串
getCalendar() 获取于此日期/时间格式器关联的日历
getDateInstance() 获取日期格式器,该格式器具有默认语言环境的默认格式化风格
getDateTimeInstance() 获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格
getInstance() 获取为日期和时间使用SHORT风格的默认日期/时间格式器
getTimeInstance() 获取时间格式器,该格式器具有默认语言环境的默认格式化风格
parse(String source) 将字符串解析成一个日期,并返回这个日期的Date对象

实例如下

import java.text.DateFormat;
import java.util.Date;

public static void main(String[] args) {
        //将当前日期按照默认模式输出
        DateFormat d1=DateFormat.getInstance();
        System.out.println(d1.format(new Date()));
        //21-9-6 下午4:40

        //输出长类型格式的当前时间
        DateFormat d2=DateFormat.getTimeInstance(DateFormat.LONG);
        System.out.println(d2.format(new Date()));
        //下午04时40分48秒

        //输出长类型格式的当前日期
        DateFormat d3=DateFormat.getDateInstance(DateFormat.LONG);
        System.out.println(d3.format(new Date()));
        //2021年9月6日

        //输出长类型格式的当前时间和日期
        DateFormat d4=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
        System.out.println(d4.format(new Date()));
        //2021年9月6日 下午04时40分48秒
    }

因为DateFormat是一个抽象类,所以,除了使用getXXXInstance()方法创建对象,还可以用其子类,例如SimpleDateFormat类,此类提供了19个格式化字符,可以让开发者随意编写日期格式


SimpleDateFormat类提供的格式化字符

字母 日期或时间元素 类型 示例
G Era标识志符 Text AD
y Year 2021;21
M 年中的月份 Month July;Jul;07
w 年中的周数 Number 22
W 月份中的周数 Number 3
D 年中的天数 Number 56
d 月份中的天数 Number 15
F 月份中的星期 Number 3
E 星期中的天数 Text Monday;Mon
a Am/pm标记 Text PM
H 一天中的小时数(0~23) Number 11
h am/pm中的小时数(1~12) Number 2
k 一天中的小时数(1~24) Number 22
K am/pm中的小时数(0~11) Number 10
m 小时中的分钟数 Number 35
s 分钟中的秒数 Number 50
S 毫秒数 Number 555
z 时区 General time zone Pacific Standard Time;PST;GMT-08:00
Z 时区 RFC 822 time zone -800

一般表中字母的数量会影响数字的格式,例如yyyy表示4位年份:2021,yy表示2位年份:21,y表示4位年份,如果超过4个y,则在左侧补0,yyyyyy表示002021

常用时间格式

日期时间 对应的格式
2021/9/6 yyyy/MM/dd
2021.9.6 yyyy.MM.dd
2021-09-06 17:42:50 yyyy-MM-dd HH.mm.ss
2021年9月6日 17时46分50秒 yyyy年MM月dd日 HH时mm分ss秒
下午5时 ah时
今年已经过去了200天 今年已经过去了D天

示例如下

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

public static void main(String[] args) {
        DateFormat d = new SimpleDateFormat("yyyy年MM月dd日 EEEE HH时mm分ss秒");
        System.out.println("现在是:");
        System.out.println(d.format(new Date()));
        //2021年09月06日 星期一 17时51分17秒
    }

Calendar类

Date在设计时并没有考虑国际化,所以之中的方法并不能满足当下需求,所以就有了Calendar类的出现,也是一个抽象类,该类提供了一些字段和方法,这些字段和方法被定义为protected。

该类提供了一个getIntance()方法,以获得此类型的一个通用对象。Calendar类的getIntance()方法返回一个Calendar类对象,其日历字段已由当前日期和时间初始化

import java.util.Calendar;

Calendar a=Calendar.getInstance();

此类提供的常用字段及其说明

字段名 说明
DATE 指示一个月中的某天
DAY_OF_MONTH 指示一个月中的某天
DAY_OF_WEEK 指示一个星期的某天
DAY_OF_WEEK_IN_MONTH 指示当前月中的第几个星期
DAY_OF_YEAR 指示当前年中的天数
HOUR 指示上午或下午的小时
HOUR_OF_DAY 指示一天中的小时
MILLISECOND 指示一秒中的毫秒
MINUTE 指示一小时的分钟
MONTH 指示月份
SECOND 指示一分钟的秒
time 日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间1970年1月1日0:00:00后经过的时间
WEEK_OF_MONTH 指示当前月中的星期数
WEEK_OF_YEAR 指示当前年中的星期数
YEAR 指示年

此类提供的常用方法和说明

方法 说明
add() 根据日历规则,为给定的日历字段添加或减去指定的时间量
after() 判断此Calendar对象表示的时间是否在指定Object表示的时间之后,返回判断结果
before() 判断此Calendar对象表示的时间是否在指定Object表示的时间之前,返回判断结果
get() 返回给定日历字段的值
getInstance() 使用默认时区和语言环境获得一个日历
getTime() 返回一个表示此判断此Calendar对象时间值(从历元至现在的时间偏移量)的Date对象
getTimeInMillis() 返回此判断此Calendar对象的时间值,以毫秒为单位
roll() 在给定的日历时间段上添加或减去(上/下)单个时间单位,不更改更大的字段
set(int field,int value) 将给定的日历字段设置为给定值
set(int year,int month,int date) 设置日历字段YEAR,MONTH和DAY_OF_MONTH的值
set(int year,int month,int date,int hourOfDay,int minute) 设置日历字段YEAR,MONTH,DAY_OF_MONTH,HOUR_OF_DAY和MINUTE的值
set(int year,int month,int date,int hourOfDay,int minute,int second) 设置日历字段YEAR,MONTH,DAY_OF_MONTH,HOUR,MINUTE和SECOND的值
setTime() 使用给定的Date对象设置此Calendar对象的值
setTimeInMillis() 用给定的long值设置此Calendar对象的当前时间值

今天离*成立100周年差多少天

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

public static void main(String[] args) {
        System.out.println("----------*100周年倒计时----------");
        Date date = new Date();
        //创建SDF对象,设置日期格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        //调用format方法,格式化时间并转换为目标格式
        String today=simpleDateFormat.format(date);
        System.out.println("今天是"+today);//输出当前日期
        //获取从1970年1月1日至当前所经历的毫秒数
        long time1= date.getTime();
        //使用默认时区和语言环境获得一个日历
        Calendar calendar=Calendar.getInstance();
        //设置日历中的年月日的值,因为月份是从0开始的,所以要减1
        calendar.set(2049,10-1,1);
        //计算自1970年1月1日到2049年10月1日所经过的毫秒数
        long time2= calendar.getTimeInMillis();
        //计算当前时间到2049年10月1日相差的时间
        long day=(time2-time1)/(1000*60*60*24);
        System.out.println("距离2049年10月1日还有"+day+"天");
    }

注:

  1. c.(Calendar.DAY_OF_MONTH,0)获取的是上个月的最后一天,所以调用前需要将月份往后加一个月
  2. Calendar.MONTH的第一个月是从0开始记录的,所以在获得月份数字后要加1。年和日是从1记录的,不用加1
  3. Calendar.DAY-OF_WEEK的第一天是周日,第二天是周一,最后一天是周六

关于setTime

import java.util.Date;

Date date = new Date();
date.setTime(10000);//10000毫秒等于10秒
System.out.println(date);
//输出Thu Jan 01 08:00:10 CST 1970

setTime(t)指的是经过从1970年1月1日8点开始经过t毫秒后的时间

上一篇:zzulioj:1045: 数值统计


下一篇:不安装任何软件或脚本使用powershell快速计算文件的MD5/SHA1/SHA256等校验值