ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-09-06 22:34:05  阅读:293  来源: 互联网

标签:DateFormat int date 日期 Date 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毫秒后的时间

标签:DateFormat,int,date,日期,Date,Calendar
来源: https://www.cnblogs.com/valder-/p/15236041.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有