目录

  1. 参考链接
  2. 实例化
  3. 日期获取与设置

    1. 获取
    2. 设置
  4. 日期比较
  5. SimpleDateFormat类

    1. format方法
    2. parse方法
  6. Calendar类

    1. 时间常量
    2. 获取时间
    3. 设置时间
    4. 时间运算

参考链接

实例化

java.util.Date 类封装了当前的日期和时间,实例化一个日期时间对象的语法如下:

Date date = new Date([millisec])

其中,可选参数 millisec 表示1970年1月1日起的毫秒数。

示例代码:

  1. import java.util.*;
  2. public class DateClass {
  3. public static void main(String[] args) {
  4. Date date = new Date();
  5. System.out.println(date.toString()); // "Sat Jun 16 12:27:53 CST 2018"
  6. }
  7. }

日期获取与设置

获取

  1. date.getTime(): 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数;
  2. date.toString(): 将 Date 对象转换为类似”Sat Jun 16 12:27:53 CST 2018”的日期字符串。

示例代码:

  1. import java.util.*;
  2. public class DateClass {
  3. public static void main(String[] args) {
  4. Date date = new Date();
  5. System.out.println(date.getTime()); // 1529123707579
  6. System.out.println(date.toString()); // "Sat Jun 16 12:35:07 CST 2018"
  7. }
  8. }

设置

自定义日期用到了date.setTime(millisec),millisec 是一个毫秒数,date 转化为=毫秒值后再加上 millisec,就是要设置的日期了。

示例代码:

  1. import java.util.*;
  2. public class DateClass {
  3. public static void main(String[] args) {
  4. Date date = new Date();
  5. long millisec = date.getTime();
  6. System.out.println(date.toString()); // "Sat Jun 16 12:42:55 CST 2018"
  7. date.setTime(millisec + (7 * 24 * 60 * 60 * 1000)); // 当前日期加上7天时长
  8. System.out.println(date.toString()); // "Sat Jun 23 12:42:55 CST 2018"
  9. }
  10. }

日期比较

日期比较用到了以下4个方法:

  1. date1.before(date2): date1 在 date2 之前就返回 true,否则返回 false;
  2. date1.after(date2): date1 在 date2 之后就返回 true,否则返回 false;
  3. date1.equals(date2): date1 与 date2 相等就返回 true,否则返回 false;
  4. date1.compareTo(date2): 如果 date1 在 date2 之前,就返回负数,之后就返回正数,相等就返回0。

示例代码:

  1. import java.util.*;
  2. public class DateClass {
  3. public static void main(String[] args) {
  4. Date date1 = new Date();
  5. Date date2 = new Date(date1.getTime() + 1000);
  6. Date date3 = new Date(date1.getTime() - 1000);
  7. Date date4 = new Date();
  8. System.out.println(date1.before(date2)); // true
  9. System.out.println(date1.after(date3)); // true
  10. System.out.println(date1.equals(date4)); // true
  11. System.out.println(date1.compareTo(date2)); // -1
  12. System.out.println(date1.compareTo(date3)); // 1
  13. System.out.println(date1.compareTo(date4)); // 0
  14. }
  15. }

SimpleDateFormat类

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

format方法

format 方法用于格式化日期时间。

示例代码:

  1. import java.util.*;
  2. import java.text.*;
  3. public class DateClass {
  4. public static void main(String[] args) {
  5. Date date = new Date();
  6. SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a E");
  7. System.out.println(ft.format(date)); // "2018-06-16 14:03:54 下午 星期六"
  8. }
  9. }

日期和时间的格式化编码如下表:

字母 描述
* 任意类型,即不限制
G 纪元标记
y 四位年份
M 月份
d 一个月的日期
h A.M./P.M. (1~12)格式小时
H 一天中的小时(0~23)
m 分钟数
s 秒数
S 毫秒数
E 星期几
D 一年中的日子
F 一个月中第几周的周几
w 一年中第几周
W 一个月中第几周
a A.M./P.M. 标记
k 一天中的小时(1~24)
K A.M./P.M. (0~11)格式小时
z 时区
文字定界符
单引号

注意,系统环境的不同,有些日期数据,比如星期(E)、上/下午标记(a)等的显示也会不同,中文系统中会显示成中文,linux 系统中则都是显示英文。

parse方法

parse 方法会把给定的时间模式字符串转换成日期字符串,用法如下:

  1. import java.util.*;
  2. import java.text.*;
  3. public class DateClass {
  4. public static void main(String[] args) {
  5. SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
  6. try {
  7. System.out.println(ft.parse("2018-06-16")); // "Sat Jun 16 00:00:00 CST 2018"
  8. } catch (ParseException e) {
  9. // TODO
  10. }
  11. }
  12. }

注意,parse 必须放在try catch,否则会报错。

Calendar类

Calendar 类用于设置和获取日期数据的特定部分(年份、月份、小时等等)。创建一个 Calendar 实例的语法如下:

Calendar cl = Calendar.getInstance(timeParams...)

用这种方法产生的是一个 GregorianCalendar 对象,所以也可以写成以下形式:

GregorianCalendar cl = new GregorianCalendar(timeParams...)

其中,timeParams(可选) 是一个或多个参数,用于设置 GregorianCalendar 对象的初始时间,默认获取的是当前时间。

时间常量

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 星期几

获取时间

  1. cl.get(field): 获取指定字段(时间常量)的时间值;
  2. cl.getTime(): 获取日历的当前时间。

示例代码:

  1. import java.util.*;
  2. import java.text.*;
  3. public class DateClass {
  4. public static void main(String[] args) {
  5. GregorianCalendar cl = new GregorianCalendar();
  6. System.out.println(cl.get(Calendar.YEAR)); // 2018
  7. System.out.println(cl.getTime()); // "Sat Jun 16 15:51:20 CST 2018"
  8. }
  9. }

设置时间

  1. cl.set(field, val): 将 field 代表的时间值设置为 val 值;
  2. cl.setTime(date): 将一个 Date 对象设置为时间值。

示例代码如下:

  1. import java.util.*;
  2. import java.text.*;
  3. public class DateClass {
  4. public static void main(String[] args) {
  5. Date date = new Date((new Date()).getTime() + (24 * 60 * 60 * 1000));
  6. GregorianCalendar cl = new GregorianCalendar();
  7. cl.set(Calendar.YEAR, 1995);
  8. System.out.println(cl.getTime()); // "Fri Jun 16 16:03:43 CST 1995"
  9. cl.setTime(date);
  10. System.out.println(cl.getTime()); // "Sun Jun 17 16:03:43 CST 2018"
  11. }
  12. }

时间运算

  1. cl.add(field, amount): 将 field 代表的时间值增加 amount 值;
  2. cl.roll(field, ifUp): 在给定的 field 上添加或减去(上/下)单个时间单元,不更改更大的字段,第二个参数 ifUp 设为 true 表示”加”,设为 false 表示”减”。

示例代码:

  1. import java.util.*;
  2. import java.text.*;
  3. public class DateClass {
  4. public static void main(String[] args) {
  5. GregorianCalendar cl = new GregorianCalendar();
  6. System.out.println(cl.getTime()); // "Sat Jun 16 16:13:25 CST 2018"
  7. cl.add(Calendar.YEAR, 1);
  8. System.out.println(cl.getTime()); // "Sun Jun 16 16:13:25 CST 2019"
  9. cl.roll(Calendar.MONTH, false);
  10. System.out.println(cl.getTime()); // "Thu May 16 16:13:25 CST 2019"
  11. }
  12. }

  1. ID : 81
  2. DATE : 2018/06/16
  3. AUTHER : WJT20
  4. TAG : Java