JAVA(13)时间日期处理

时间日期

Date 类

  • Date 类表示系统特定的时间戳,可以精确到毫秒。
  • Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。
  • Date类有两种构造方法
    1、 Date(): 此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。
    2、 Date(long date): 此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。
Date date1=new Date();    //调用无参数构造函数
System.out.println(date1.toString());    //输出:Wed May 18 21:24:40 CST 2016
Date date2=new Date(60000);    //调用含有一个long类型参数的构造函数
System.out.println(date2);    //输出:Thu Jan 0108:01:00 CST 1970
  • Date 类的无参数构造方法获取的是系统当前的时间,显示的顺序为星期、月、日、小时、分、秒、年。

  • Date 类带 long 类型参数的构造方法获取的是距离 GMT 指定毫秒数的时间,60000 毫秒是一分钟,而 GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00 GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。 因此距离 1970 年 1 月 1 日 00:00:00 CST 一分钟的时间为 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 对象表示为 Thu Jan 01 08:01:00 CST 1970。

表1 Date类中的常用方法

方法 描述
boolean after(Date when) 判断此日期是否在指定日期之后
boolean before(Date when) 判断此日期是否在指定日期之前
int compareTo(Date anotherDate) 比较两个日期的顺序
boolean equals(Object obj) 比较两个日期的相等性
long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来,此 Date 对象表示的毫秒数
String toString() 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)

Calendar 类

  • Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。
  • 创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。
  • Calendar c = Calendar.getInstance();
方法 描述
void add(int field, int amount) 根据日历的规则,为给定的日历字段 field 添加或减去指定的时间量 amount
boolean after(Object when) 判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回判断结果
boolean before(Object when) 判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回判断结果
void clear() 清空 Calendar 中的日期时间值
int compareTo(Calendar anotherCalendar) 比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0
int get(int field) 返回指定日历字段的值
int getActualMaximum(int field) 返回指定日历字段可能拥有的最大值
int getActualMinimum(int field) 返回指定日历字段可能拥有的最小值
int getFirstDayOfWeek() 获取一星期的第一天。根据不同的国家地区,返回不同的值
static Calendar getInstance() 使用默认时区和语言坏境获得一个日历
static Calendar getInstance(TimeZone zone) 使用指定时区和默认语言环境获得一个日历
static Calendar getInstance(TimeZone zone,Locale aLocale) 使用指定时区和语言环境获得一个日历
Date getTime() 返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量)的 Date 对象
long getTimeInMillis() 返回此 Calendar 的时间值,以毫秒为单位
void set(int field, int value) 为指定的日历字段设置给定值
void set(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value) 设置一星期的第一天是哪一天
void setTimeInMillis(long millis) 用给定的 long 值设置此 Calendar 的当前时间值
  • Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元前。Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常量指定。

Calendar 类中定义了许多常量,分别表示不同的意义。
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:星期几。

Calendar calendar=Caiendar.getlnstance();    //如果不设置时间,则默认为当前时间
caiendar.setTimefnew Date());    //将系统当前时间赋值给 Calendar 对象
System.out.println("现在时刻:"+calendar.getTime());    //获取当前时间
int year=calendar.get(Calendar.YEAR);    //获取当前年份
System.out.println("现在是"+year+"年");
int month=calendar.get(Calendar.MONTH)+1;    //获取当前月份(月份从 0 开始,所以加 1)
System.out.print(month+"月");
int day=calendar.get(Calendar.DATE);    //获取日
System.out.print(day+"日");
int week=calendar.get(Calendar.DAY_OF_WEEK)-1;    //获取今天星期几(以星期日为第一天)
System.out.print("星期"+week);
int hour=calendar.get(Calendar.HOUR_OF_DAY);    //获取当前小时数(24 小时制)
System.out.print(hour+"时");
int minute=calendar.get(Calendar.MINUTE);    //获取当前分钟
System.out.print(minute+"分");
int second=calendar.get(Calendar.SECOND);    //获取当前秒数
System.out.print(second+"秒");
int millisecond=calendar.get(Calendar.MILLISECOND);    //获取毫秒数
System.out.print(millisecond+"毫秒");
int dayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);    //获取今天是本月第几天
System.out.println("今天是本月的第 "+dayOfMonth+" 天");
int dayOfWeekInMonth=calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);    //获取今天是本月第几周
System.out.println("今天是本月第 "+dayOfWeekInMonth+" 周");
int many=calendar.get(Calendar.DAY_OF_YEAR);    //获取今天是今年第几天
System.out.println("今天是今年第 "+many+" 天");
Calendar c=Calendar.getInstance();
c.set(2012/8/8);    //设置年月日,时分秒将默认采用当前值
System.out.println("设置日期为 2012-8-8 后的时间:"+c.getTime());    //输出时间

DateFormat 类

  • DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期→文本)、解析(文本→日期)和标准化日期。
  • 在创建 DateFormat 对象时不能使用 new 关键字,而应该使用 DateFormat 类中的静态方法 getDateInstance(),示例代码如下
  • DateFormat df = DateFormat.getDateInstance();
//获取不同格式化风格和中国环境的日期
DateFormat df1=DateFormat.getDateInstance(DateFormat.SHORT,Locale.CHINA);
DateFormat df2=DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA);
DateFormat df3=DateFormat.getDateInstance(DateFormat.MEDIUM,Locale.CHINA);
DateFormat df4=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
//获取不同格式化风格和中国环境的时间
DateFormat df5=DateFormat.getTimeInstance(DateFormat.SHORT,Locale.CHINA);
DateFormat df6=DateFormat.getTimeInstance(DateFormat.FULL,Locale.CHINA);
DateFormat df7=DateFormat.getTimeInstance(DateFormat.MEDIUM,Locale.CHINA);
DateFormat df8=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
//将不同格式化风格的日期格式化为日期字符串
String date1=df1.format(new Date());
String date2=df2.format(new Date());
String date3=df3.format(new Date());
String date4=df4.format(new Date());
//将不同格式化风格的时间格式化为时间字符串
String time1=df5.format(new Date());
String time2=df6.format(new Date());
String time3=df7.format(new Date());
String time4=df8.format(new Date());
//输出日期
System.out.println("SHORT:"+date1+" "+time1);
System.out.println("FULL:"+date2+" "+time2);
System.out.println("MEDIUM:"+date3+" "+time3);
System.out.println("LONG:"+date4+" "+time4);

SimpleDateFormat 类

  • 如果使用 DateFormat 类格式化日期/时间并不能满足要求,那么就需要使用 DateFormat 类的子类——SimpleDateFormat。

  • SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类,它允许进行格式化(日期→文本)、解析(文本→日期)和规范化。SimpleDateFormat 使得可以选择任何用户定义的日期/时间格式的模式。

  • SimpleDateFormat 类主要有如下 3 种构造方法。
    1、 SimpleDateFormat():用默认的格式和默认的语言环境构造 SimpleDateFormat。
    2、 SimpleDateFormat(String pattern):用指定的格式和默认的语言环境构造 SimpleDateF ormat。
    3、 SimpleDateFormat(String pattern,Locale locale):用指定的格式和指定的语言环境构造 SimpleDateF ormat。

你可能感兴趣的:(JAVA(13)时间日期处理)