Java基础及提高 之 日期日历篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013987258/article/details/82345926

Date类

java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。

第一个构造函数使用当前日期和时间来初始化对象。

Date( )

第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。

Date(long millisec)

使用 SimpleDateFormat 格式化日期
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行
例子:

import java.util.*;
import java.text.*;

public class DateDemo {
   public static void main(String args[]) {

      Date dNow = new Date();
      SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(dNow));
   }
}
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。

注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。

以上实例编译运行结果如下:

Current Date: Wed 2016.11.09 at 08:23:19 AM UTC

日期和时间的格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:

字母 描述 示例
G 纪元标记 AD
y 四位年份 2001
M 月份 July or 07
d 一个月的日期 10
h  A.M./P.M. (1~12)格式小时 12
H 一天中的小时 (0~23) 22
m 分钟数 30
s 秒数 55
S 毫秒数 234
E 星期几 Tuesday
D 一年中的日子 360
F 一个月中第几周的周几 2 (second Wed. in July)
w 一年中第几周 40
W 一个月中第几周 1
a A.M./P.M. 标记 PM
k 一天中的小时(1~24) 24
K  A.M./P.M. (0~11)格式小时 10
z 时区 Eastern Standard Time
文字定界符 Delimiter
单引号 `

综合实例:

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

public class DateTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Date date = new Date();
        // 日期-->字符串(方法一)
        SimpleDateFormat sdf = new SimpleDateFormat();
        String str = sdf.format(date);
        System.out.println(str);  //18-9-3 上午11:26

        // 日期-->字符串(方法二)
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str1 = sdf1.format(date);
        System.out.println(str1);   //2018-09-03 11:26:42

        // 字符串-->日期
        String str2 = "2018-09-02 21:00:29";
        //捕获异常(str2的格式要满足sdf1的格式)
        try {
            Date date2 = sdf1.parse(str2);
            System.out.println(date2);   //Sun Sep 02 21:00:29 CST 2018
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // 输入毫秒数转化为日期
        date.setTime(System.currentTimeMillis() + 24 * 60 * 60 * 1000);
        // 或者直接
        // Date date = new Date(System.currentTimeMillis() + 24*60*60*1000);
        System.out.println(date);   //Tue Sep 04 11:26:42 CST 2018
    }

}

Calendar类

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

创建一个代表系统当前日期的Calendar对象

Calendar c = Calendar.getInstance();//默认是当前日期

创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。

//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);

Calendar类对象字段类型
Calendar类中用以下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想

常量 描述
Calendar.YEAR 年份
Calendar.MONTH 月份
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的字段意义完全相同
Calendar.HOUR 12小时制的小时
Calendar.HOUR_OF_DAY 24小时制的小时
Calendar.MINUTE 分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK 星期几

综合实例:

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

public class CalendarTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Calendar ca = Calendar.getInstance();
        System.out.println(ca);
        /**
         * 结果为: java.util.GregorianCalendar[ time=1535891259673,
         * areFieldsSet=true, areAllFieldsSet=true, lenient=true,
         * zone=sun.util.calendar.ZoneInfo[ id="Asia/Shanghai", offset=28800000,
         * dstSavings=0, useDaylight=false, transitions=19, lastRule=null],
         * firstDayOfWeek=1, minimalDaysInFirstWeek=1, ERA=1, YEAR=2018,
         * MONTH=8, WEEK_OF_YEAR=36, WEEK_OF_MONTH=2, DAY_OF_MONTH=2,
         * DAY_OF_YEAR=245, DAY_OF_WEEK=1, DAY_OF_WEEK_IN_MONTH=1, AM_PM=1,
         * HOUR=8, HOUR_OF_DAY=20, MINUTE=27, SECOND=39, MILLISECOND=673,
         * ZONE_OFFSET=28800000, DST_OFFSET=0]
         */
        // 获得年
        int year = ca.get(Calendar.YEAR);
        // 获得月
        int month = ca.get(Calendar.MONTH) + 1;
        // 获得日
        int date = ca.get(Calendar.DAY_OF_MONTH);
        // 获得小时
        int hour = ca.get(Calendar.HOUR_OF_DAY);
        // 获得分钟
        int minute = ca.get(Calendar.MINUTE);
        // 获得秒
        int second = ca.get(Calendar.SECOND);
        // 获得毫秒
        int seconds = ca.get(Calendar.MILLISECOND);

        System.out.println(year + "-" + month + "-" + date + " " + hour + ":"
                + minute + ":" + second + ":" + seconds);  //2018-9-3 11:32:15:84

        // 设置日历
        ca.set(Calendar.YEAR, 1985);
        ca.set(Calendar.MONTH, 04);
        ca.set(Calendar.DAY_OF_MONTH, 22);
        ca.set(Calendar.HOUR_OF_DAY, 6);
        ca.set(Calendar.MINUTE, 23);
        ca.set(Calendar.SECOND, 34);
        ca.set(Calendar.MILLISECOND, 344);
        System.out.println(ca);  //java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1985,MONTH=4,WEEK_OF_YEAR=36,WEEK_OF_MONTH=2,DAY_OF_MONTH=22,DAY_OF_YEAR=246,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=11,HOUR_OF_DAY=6,MINUTE=23,SECOND=34,MILLISECOND=344,ZONE_OFFSET=28800000,DST_OFFSET=0]

        // 获得日历相关的毫秒数,Calendar->Date
        long tm = ca.getTimeInMillis();
        Date date2 = new Date(tm);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = sdf.format(date2);
        System.out.println(str);    //1985-05-22 06:23:34
        System.out.println(date2);  //Wed May 22 06:23:34 CST 1985
    }

}

关于 Calender 类的完整列表,你可以参考标准的 Java文档

猜你喜欢

转载自blog.csdn.net/u013987258/article/details/82345926