Date、SimpleDateFormat、Calendar的基本使用

1.Date类


概述


java.uti1.Date 类 表示特定的瞬间,精确到毫秒。

继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象,

  • public Date) : 分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
  • public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元 (epoch)",即1970年1月1日00:00:00 GMT) 以来的指定毫秒数。

tips:由于我们处于东八区,所以我们的基准时间19701月1日8时0分0秒

简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。例如:

import java.util.Date;
public class Demo0lDate {

public static void main(string[] args) {

//创建日期对象,把当前的时间
system.out.printIn(new Date()); // Tue jan 16 14:37:35 CST 2018

// 创建日期对象,把当前的毫秒值转成日期对象

system.out.printIn(new Date(0L)); // Thu jan 01 08 :00:00 CST 1970

     }

}

tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。

常用方法

(1)获取当前时间(Date)

​ Date():无参数创建一个日期时间对象,获取的当前运行时间。

Date date = new Date();
System.out.println(date); // Thu Feb 21 14:22:09 GMT+08:00 2019

(2)获取原点后多少毫秒值的时间(Date(long time))

​ Date(Long time):参数代表从原点时刻所经过的毫秒数

Date date1 = new Date(1000l);
System.out.println(date1); // Thu Jan 01 08:00:01 GMT+08:00 1970

3)设置毫秒数(setTime)

​ 设置进去一个毫秒数

long time=1000l*2*60*60*24;
Date d1 = new Date();
d1.setTime(time);
System.out.println(d1); // Sat Jan 03 08:00:00 GMT+08:00 1970

(4)获取毫秒数(getTime)

 long time=1000l*2*60*60*24;
 Date d1 = new Date();
 d1.setTime(time);
 System.out.println(d1.getTime()); // 172800000

案例:

import java.util.Date;

public class DateTest1 {
    public static void main(String[] args) {
        //日期类型:生出日期 下单时间 付款时间 预约时间
        //类 Date 表示特定的瞬间,精确到毫秒
        Date date1=new Date();//获取当前的时间
        System.out.println(date1);

        Date date2=new Date(1000);//创建距离1970年1月1日 08:00:00 (中国东区) 经过了多少毫秒的时间
        System.out.println(date2);
    }
}

2.SimpleDateFormat


字符串和时间之间的转换(SimpleDateFormat中format和parse的使用)

​ java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

  • 格式化:按照指定的格式,从Date对象转换为String对象。
  • 解析:按照指定的格式,从string对象转换为Date对象。

构造方法

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类 java,text.simpleDateFormat,这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:

public simpleDateFormat(string pattern): 用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

(“yyyy年MM月dd日 HH:mm:ss”);我们一般使用这个构造方法来实例化SimpleDateFormat对象。
​ 参数字符串代表格式,只要记住一套即可:(严格区分大小写)

格式规则

常用的格式规则为:

标识字母(区分大小写)含义
y
M
d
H小时
m分钟
s秒钟
S毫秒

​ 格式化:Date–>string format(Date date):将参数日期时间对象,变成字符串

  Date date=new Date();

 //SimpLeDateFormat是DateFormat的子类,用来做日期和字符串之间的相互转换
 //实网化日期格式化类,指定格式化的格式样式 
 SimpleDateFormat sdf=new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
 
//日期 格式化成 宁符串
 String format = sdf.format(date);
 System.out.println(format);

 解析:string–>Date parse(String str):将参数字符串转换为对应的日期时间

String date="2019-02-52 14:57:14";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date parse = dateFormat.parse(date);
System.out.println(parse); // Thu Feb 21 14:57:14 GMT+08:00 2019

案例:

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

public class DateFormatTest2 {
    public static void main(String[] args) throws ParseException {
        Date date=new Date();

        //SimpLeDateFormat是DateFormat的子类,用来做日期和字符串之间的相互转换
        SimpleDateFormat sdf=new SimpleDateFormat("yyy/MM/dd HH:mm:ss");//实网化日期格式化类,指定格式化的格式样式

        //日期 格式化成 宁符串
        String format = sdf.format(date);
        System.out.println(format);

        //字符串 解析成 日期
        String time="2000/10/15 08:10:20";
        Date date1=sdf.parse(time);
        System.out.println(date1);
    }
}

3.calendar


获取日历对象(calendar)

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

获取方式

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:

Calendar静态方法

public static calendar getInstance() : 使用默认时区和语言环境获得一个日历

//Calendar 的 getInstance 方法返回一个 Calendar对象
        Calendar calendar=Calendar.getInstance();
        //获取当前时间
        Date time=calendar.getTime();
        System.out.println(time);

根据参数,获取相应值(get(int field))

​ 参数代表:你想要哪一条数据?年、月、日

​ 参数不推荐使用int数字,推荐使用calendar当中的常量

//可以获取当前时间任何你想要获得的信息
        int year = calendar.get(calendar.YEAR);//获取当前时间的年份
        System.out.println("年份:"+year);
        int month = calendar.get(calendar.MONTH);
        System.out.println("月份:"+month+1);
        int dayOfYear = calendar.get(calendar.DAY_OF_YEAR);
        System.out.println("本年第:"+dayOfYear);
        //Calendar 可以通过 get方法指定 字段值  来获取当前时间的一些信息

设置数据,成为指定的数值(set (int field,int value) )

Calendar instance = Calendar.getInstance();
instance.set(Calendar.YEAR,2019);
instance.set(Calendar.MONTH,1);
instance.set(Calendar.DAY_OF_MONTH,21);
instance.add(Calendar.MONTH,3);
instance.add(Calendar.DAY_OF_MONTH,8);
System.out.println(instance);
// java.util.GregorianCalendar[time=1559116495439,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=4,WEEK_OF_YEAR=22,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=149,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=54,SECOND=55,MILLISECOND=439,ZONE_OFFSET=28800000,DST_OFFSET=0]
YEAR=2019,MONTH=4 DAY_OF_MONTH=29


对数据进行偏移量计算(add (int field,int amount))

Calendar instance = Calendar.getInstance();
instance.set(Calendar.YEAR,2019);
instance.set(Calendar.MONTH,1);
instance.set(Calendar.DAY_OF_MONTH,21);
instance.add(Calendar.MONTH,3);
instance.add(Calendar.DAY_OF_MONTH,8);
System.out.println(instance);
// java.util.GregorianCalendar[time=1559116495439,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=4,WEEK_OF_YEAR=22,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=149,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=54,SECOND=55,MILLISECOND=439,ZONE_OFFSET=28800000,DST_OFFSET=0]
YEAR=2019,MONTH=4 DAY_OF_MONTH=29

将calendar转换为Date(getTime())

  1. Date类当中的getTime是获取毫秒数,得到long值。
  2. Calendar当中的getTime是获取Date对象。
 Calendar instance = Calendar.getInstance();
 System.out.println(instance.getTime()); // Thu Feb 21 16:01:45 GMT+08:00 2019

获取当前毫秒数(getTimeInMillis)

​ 在Calendar中获取毫秒值是通过getTimeInMillis得到的。

Calendar instance = Calendar.getInstance(); System.out.println(instance.getTimeInMillis()) // 1550737081914

System

获取当前系统的毫秒数(currentTimeMillis())

​获取系统运行此时此刻的毫秒数

 long millis = System.currentTimeMillis();
 System.out.println(millis); // 1550736560229

附加:他们仨的相互转换图:

在这里插入图片描述

 案例:

import java.util.Calendar;
import java.util.Date;

public class CalendarTest3 {
    public static void main(String[] args) {
        //Calendar 的 getInstance 方法返回一个 Calendar对象
        Calendar calendar=Calendar.getInstance();
        //获取当前时间
        Date time=calendar.getTime();
        System.out.println(time);

        //可以获取当前时间任何你想要获得的信息
        int year = calendar.get(calendar.YEAR);//获取当前时间的年份
        System.out.println("年份:"+year);
        int month = calendar.get(calendar.MONTH);
        System.out.println("月份:"+month+1);
        int dayOfYear = calendar.get(calendar.DAY_OF_YEAR);
        System.out.println("本年第:"+dayOfYear);
        //Calendar 可以通过 get方法指定 字段值  来获取当前时间的一些信息

        System.out.println("----------------------------");

        //指定年月日、日分秒   月份0-11表示 1-12月
        calendar.set(2022,11,25,23,59,60);
        //获取指定的时间
        Date date1 = calendar.getTime();
        System.out.println(date1);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值