java中对Date的操作

一.Date类
Date表示特定的瞬间,精确到毫秒。
Date date=new Date();
System.out.println(date);
Date类中的许多方法都已经过时了,被Calendar类替代。这个类我们会在之后讲到。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。
二.DateFormat类
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。
获取日期格式器
DateFormat dateDef = DateFormat.getDateInstance();//日期格式
DateFormat dateTimeDef = DateFormat.getDateTimeInstance();//日期和时间
DateFormat timeDef = DateFormat.getTimeInstance();//时间

  package trying.dateTest;

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

import org.junit.Test;

/**
 * @ClassName: TestDateFormat
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author wangcc
 * @date 2016年11月26日 上午12:12:23
 * 
 *       DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
 */
public class TestDateFormat {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        getDateStyle();
        getDate();
    }

    @Test
    public void getDateAll() {
        Date date = new Date();
        DateFormat dateDef = DateFormat.getDateInstance();
        // 为SHORT MEDIUM时,Locale没起作用,依旧是英文格式
        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
        DateFormat dateLocaleFormat = DateFormat.getDateInstance(
                DateFormat.LONG, Locale.CHINA);
        DateFormat dateLocaleFormat2 = DateFormat.getDateInstance(
                DateFormat.LONG, Locale.CHINESE);
        DateFormat dateTimeDef = DateFormat.getDateTimeInstance();
        DateFormat dateTime = DateFormat.getDateTimeInstance(DateFormat.LONG,
                DateFormat.LONG);
        DateFormat dateTimeLocale = DateFormat.getDateTimeInstance(
                DateFormat.FULL, DateFormat.FULL, Locale.CHINA);
        DateFormat timeDef = DateFormat.getTimeInstance();
        DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.LONG);
        DateFormat timeLocale = DateFormat.getTimeInstance(DateFormat.SHORT,
                Locale.CHINA);
        System.out.println("无参数的getDateInstance:" + dateDef.format(date));
        System.out
                .println("指定style的getDateInstance:" + dateFormat.format(date));
        System.out.println("指定style和本地语言的getDateInstance:(china)"
                + dateLocaleFormat.format(date));
        System.out.println("指定style和本地语言的getDateInstance:(chinese)"
                + dateLocaleFormat2.format(date));
        System.out
                .println("无参的getDateTimeInstance:" + dateTimeDef.format(date));
        System.out.println("指定style的getDateTimeInstance:"
                + dateTime.format(date));
        System.out.println("指定style和本地语言的getDateTimeInstance:"
                + dateTimeLocale.format(date));
        System.out.println("无参数的getTimeInstance:" + timeDef.format(date));
        System.out
                .println("指定style的getTimeInstance:" + timeFormat.format(date));
        System.out.println("指定style和本地语言的getTimeInstance:"
                + timeLocale.format(date));
        System.out.println(dateFormat.format(date));

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

    public static void getDate() {
        Date date = new Date();
        DateFormat df = DateFormat.getDateInstance(DateFormat.FULL,
                Locale.CHINA);
        DateFormat df1 = DateFormat.getDateInstance();
        // 20161129日 星期二 上午110728秒 CST
        DateFormat df2 = DateFormat.getDateTimeInstance(DateFormat.FULL,
                DateFormat.FULL, Locale.CHINA);
        DateFormat df3 = DateFormat.getDateTimeInstance(DateFormat.FULL,
                DateFormat.FULL, Locale.CHINA);
        // DateFormat df2 = DateFormat.getDateTimeInstance();
        String s = df.format(date);
        String s1 = df1.format(date);
        String s2 = df2.format(date);
        String s3 = df3.format(date);
        System.out.println(s);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }

    public static void getDateStyle() {
        DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL,
                Locale.CHINA);
        DateFormat df2 = DateFormat.getTimeInstance(DateFormat.FULL);
        String s = df.format(new Date());
        String s2 = df2.format(new Date());
        System.out.println("FULL:" + s);
        System.out.println("LONG:" + s2);
    }
}

控制台输出为:
这里写图片描述
三.SimpleDateFormat
SimpleDateFormat类主要用于完成日期之间的转换
例如你指定一个模板:2016年-11月-26日-12时-09分-56秒
你就需要
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd-HH-mm-ss”);
这样就匹配了这个模板格式

Y yyyy 年份 M MM 月 dd 日 HH 时(24小时制) hh 时(12小时制) mm 分 ss秒 S毫秒
这里写图片描述
SimpleDateFormat 有两个常用的方法:
1.public final String format(Date date)
2.public Date parse(String source)
throws ParseException
这两个方法都来自其父类DateFormat,利用上面两个函数,我们可以完成指定格式的Date与String的转化。下面看一段代码:

package trying.dateTest;

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

import org.junit.Test;

/**
 * @ClassName: TestSimpleDateFormat
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author wangcc
 * @date 2016年11月26日 上午12:11:07
 * 
 *       SimpleDateFormat类主要用于完成日期之间的转换 你需要指定一个模板 2016年-11月-26日-12时-09分-56秒 ==
 * 
 *       Y yyyy 年份 M MM 月 dd 日 HH 时(24小时制) hh 时(12小时制) mm 分 ss秒 S毫秒
 */
public class TestSimpleDateFormat {

    public static void main(String[] args) {
        StringtoDate();
    }

    @Test
    public void retest() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-S");
        String s = "2016-11-29-09-12-12-123";
        DateFormat df = DateFormat.getDateInstance();
        Date date = null;
        try {
            date = sdf.parse(s);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(date);
    }

    public static void StringtoDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年-MM月-dd日-hh时-mm分-ss秒");
        String s = "2016年-11月-26日-12时-09分-56秒";
        Date date = null;
        try {
            date = sdf.parse(s);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(date);
    }

    public static void testDate() {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(
                "yyyy年-MM月-dd日-hh时-mm分-ss秒-S毫秒");
        String s = sdf.format(date);
        System.out.println(s);
    }

    public static void test() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss-S");
        String s = sdf.format(System.currentTimeMillis());
        System.out.println(s);

    }
}

四.Calendar类
Calendar 类是一个抽象类,它为“特定瞬间”与一组诸如 “YEAR”、“MONTH”、“DAY_OF_MONTH” 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。 Calendar实例化有两种方式:
1 Calendar nowTime = new GregorianCalendar();
2.Calendar calendar=Calendar.getInstance();
下面我们直接看应用:

package trying.dateTest;

import java.util.Calendar;
import java.util.GregorianCalendar;

import org.junit.Test;

/**
 * @ClassName: TestCalendar
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author wangcc
 * @date 2016年11月26日 上午12:27:04
 * 
 *       Calendar 类是一个抽象类,它为“特定瞬间”与一组诸如 “YEAR”、“MONTH”、“DAY_OF_MONTH”、
 *       等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。 Calendar实例化有两种方式,第一种是
 *       Calendar nowTime = new GregorianCalendar();,第二种是Calendar
 *       calendar=Calendar.getInstance();
 */
public class TestCalendar {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // getTime();
    }

    @Test
    public void test() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2016, 10, 29);
        System.out.println(calendar.getTime());
    }

    public static void getTime() {
        Calendar nowTime = new GregorianCalendar();
        int year = nowTime.get(Calendar.YEAR);
        int month = nowTime.get(Calendar.MONTH) + 1;
        int day = nowTime.get(Calendar.DAY_OF_MONTH);
        System.out.println("现在的日期是:" + year + "年" + month + "月" + day + "日");

    }

}

我们对Test方法进行测试:测试结果为:Tue Nov 29 22:47:49 CST 2016
而calendar.set(2016, 10, 29); 参数month设置的是10,结果却是11月。这是为什么呢,那么这个时候我们需要查阅JDK API,API永远是最好的老师。
这里写图片描述

API中说get和set中MONTH是基于0开始的,0即表示为January一月。
所以set(10) 会得到11月,而get(MONTH)+1才能得到真正的月份。
五.创建自己的DateUtil类
在学习了上述知识后,我们可以写一个属于自己的Date工具类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值