← 返回首页
JavaSE系列教程(五十三)
发表时间:2020-02-02 13:38:42
讲解Date/Calendar类以及日期时间的格式化。

1.java.util.Date

在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。

例如:

Date d = new Date();
System.out.println(d); //打印当前日期时间的字符串
System.out.println(d.getTime()); //返回距离1970-01-01 00:00:00 的毫秒数

运行结果:
Sun Feb 02 13:23:26 CST 2020
1580621006710

2.Calendar

Calendar 类是一个抽象类,它为特定瞬间与一组诸如:YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。Calendar替代了很多Date中的方法,所以Date中的类很多方法被标注为过时。

例如:

        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        System.out.println(calendar.get(Calendar.YEAR)); //返回年份
        System.out.println(calendar.get(Calendar.MONTH)); //返回月份
        System.out.println(calendar.get(Calendar.DATE)); //返回日期
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//返回星期几
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//返回日期
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));//返回小时
        System.out.println(calendar.get(Calendar.MINUTE));//返回分钟
        System.out.println(calendar.get(Calendar.SECOND));//返回秒
        System.out.println(calendar.getTimeZone());//返回时区

运行结果:
java.util.GregorianCalendar[time=1580621483794,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=1,WEEK_OF_YEAR=6,WEEK_OF_MONTH=2,DAY_OF_MONTH=2,DAY_OF_YEAR=33,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=31,SECOND=23,MILLISECOND=794,ZONE_OFFSET=28800000,DST_OFFSET=0]
2020
1
2
1
2
13
31
23
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null]

3.日期时间的格式化

使用 SimpleDateFormat 类的 format(date) 方法来格式化时间。

例如:

        Date date = new Date();
        String strDateFormat = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
        System.out.println(sdf.format(date));
        strDateFormat = "yyyy年MM月dd日 HH:mm:ss";
        sdf = new SimpleDateFormat(strDateFormat);
        System.out.println(sdf.format(date));

运行结果:
2020-02-02 13:36:23
2020年02月02日 13:36:23

4.String转Date

SimpleDateFormat 的parse(String s)方法可以实现字符串转换为日期对象。 例如:

    public static void main(String[] args) throws Exception {

        String s = "2020-01-01";

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d = sdf.parse(s);

        System.out.println(d);
    }

运行结果:
Wed Jan 01 00:00:00 CST 2020

小结:

1).java.util.Date可以用来生成一个当前的日期时间对象。要想获得该日期时间对象中更精确的信息比如:年份,月份,小时,分钟推荐使用java.util.Calendar类实现。

2).使用 SimpleDateFormat 类的 format(date) 方法来格式化时间。

3).SimpleDateFormat 的parse(String s)方法可以实现字符串转换为日期对象。