Date类、DateFormat抽象类、SimpleDateFormat类和Calendar类

一、Date类

1.Date类时Java里面进行日期操作的常用类,Date类用来表示特定的瞬间,精确到毫秒。
2.常用方法
public boolean after(Date when)
测试此日期是否在指定日期之后

public boolean before(Date when)
测试此日期是否在指定日期之前

getTime()方法返回自1970年1月1日00:00:00 GMT以来此Date对象表示的毫秒数。

示例
简单的性能测试:监控一段代码运行所需要的时间。

/**
* Date类的getTime()方法返回Date对象自1970年1月1日00:00:00 GMT以来的毫秒数。
*/
import java.util.*;
public class DateTest1{
    public static void main(String[] args){
        long time1 = new Date().getTime();//获取此时的时间
        int sum = 0;
        for(int i = 1; i <= 100000000; i++){
            sum += i;
        }

        long time2 = new Date().getTime();//获取此时的时间
        System.out.println(time1);
        System.out.println(time2);
        System.out.println(time2 - time1);

        Date d = new Date();
        System.out.println(d);
    }
}

二、DateFormat类和SimpleDateFormat类

Date对象表示时间的默认顺序是星期、月、日、小时、秒、年,例如

Mon June 8 21:01:01 CST 2016

我们如果希望用某个习惯的格式来输出时间,例如时间的顺序:年、月、日、星期。可以用java.text包中的DateFormat类,是日期/ 时间格式化子类的抽象类。日期/时间格式化子类(如SimpleDateFormat)允许进行格式化(即日期转换成文本)、解析(文本转换成日期)和标准化。

1.日期和时间模式

日期和时间格式由日期和时间模式字符串指定。A-Z、a-z被解释成模式字母,文本用单引号引起来,以免进行解释。其他字符均不解释。
Java中定义了以下模式字母(其他字母都被保留)


G  Era标志符  例:AD
y  年
M  年中的月份
w  年中的周数
W  月份中的周数
D  年中的天数
d  月份中的天数
F  月份中的星期
E  星期中的天数
a  am/pm标记  例:PM
H  一天中的小时数(0-23)
k  一天中的小时数(1-24)
K  am/pm中的小时数(0-11)
h  am/pm中的小时数(1-12)
m  小时中的分钟数
s  分钟中的秒数
S  毫秒数
z  时区  例:Pacific Standard Time;PST;GMT-08:00
Z  时区  例:-0800

2.示例

/**
* DateFormat 和SimpleDateFormat
* 常用方法parse()和format()
*/
import java.util.Date;
import java.text.ParseException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class DateMethods{
    public static void main(String[] args){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        Date d = new Date();

        String str = df.format(d);//转化为我们熟悉的时间格式,解析文本
        System.out.println(d);
        System.out.println(str);

        try{
            Date d2 = df.parse(str);//将一个Date格式化为日期/时间字符串
            Date d3 = df.parse("1993-9-31 09:09:01 999");
            System.out.println(d2);
            System.out.println(d3);
        }catch(ParseException e){   //表示解析时出现意外错误
            e.printStackTrace();
        }
    }
}

3.说明

JDK文档上的Date的毫秒值,是相对于格林威治时间1970年1月1日0点,但实际测试,这个Date跟时区相关,在中国这个基准值是1970年1月1日8点。示例如下

/**
* 获得基准时间,Date的基准时间跟时区有关,中国的基准值是
* 1970年1月1日8点
*/
import java.text.*;
import java.util.*;
public class ReferenceTime{
    public static void main(String[] args){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        Date d = new Date(0L);//把时间设为0,表示到基准时间

        String str = df.format(d);
        System.out.println(str);
    }
}

三、Calendar类

java.util包中的Calendar类是java里另外一个常用的日期处理的类,是一个抽象类。

1.初始化

Calendar c = Calendar.getInstance();

2.使用Calendar对日期进行部分析取和进行日期运算

示例

/**
* java.util包中的Calendar类
*/
import java.util.*;
public class CalendarTest{
    public static void main(String[] args){
        Calendar c = Calendar.getInstance();//通过静态方法getInstance()来获取Calendar实例
        int year = c.get(Calendar.YEAR);//get()返回给定日历字段的值
        int month = c.get(Calendar.MONTH) + 1;//MONTH比较特殊,从0开始,也就是0表示1月
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println("今天是 " + year + "年" + month + "月" + day + "日");

        //add方法为给定的日历字段添加或减去指定的时间
        c.add(Calendar.DATE,5);//当前日期加5天
        c.add(Calendar.DATE,-5);//当前日期加5天
        System.out.println("今天是" + c.get(Calendar.DAY_OF_MONTH) + "号");
    }
}

3.为Calendar设置初始值

/**
* Calendar设置初始值
*/
import java.util.*;
public class CalendarOriginalValue{
    public static void main(String[] args){
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(2234567890000L);//该方法作用是用long值设置Calendar的当前时间值

        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "." + month + "." + day);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值