【日期类】Java 中常用的日期类(上)

在 Java 8 之前,操作日期类的有两个:java.util.Datejava.util.Calendar;在 Java 8 之后,又推出了一个全新的日期类 java.time.LocalDate。接下来,简单地介绍下如何使用它们吧

1. java.util.Date

讲 java.util.Date 类之前,咱们先说说另外一个类的方法吧,System.currentTimeMillis():返回当前时间与格林威治时间 1970-01-01 00:00:00 (北京时间:1970-01-01 08:00:00)之间以毫秒为单位的时间差。此方法适用于计算时间差

// 1626624005531  时间戳
Long time = System.currentTimeMillis();

System.currentTimeMillis() 方法的返回类型是 Long 类型。一般用于获取某个方法或其它的执行时间差。即:在开始前获取一次,在结束时获取一次,结束时间减去开始时间,得到执行时间。如:

public class DateTest {

    public void test() {
        System.out.println("======test======");
    }
    

    public static void main(String[] args) {
        DateTest dateTest = new DateTest();

        Long startTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            dateTest.test();
        }
        Long endTime = System.currentTimeMillis();

        Long result = endTime - startTime;
        // 55 毫秒
        System.out.println(result);
    }
}

在上述代码中,for 循环调用了 DateTest#test() 方法 10000 次,耗时 55 毫秒。


时间戳与 java.util.Date 类互相转换:

// Date 类型转换为时间戳
Date date = new Date();
Long time = date.getTime();
// 时间戳转换为 Date 类型
Long long = 1626624005531L;
Date nowTime = new Date(long);

一般 java.util.Date 类与 java.text.SimpleDateFormat 类一起用,用于格式化日期。

如:将日期转换为特定格式的字符串:

public class DateTest {

    public static void main(String[] args) {
        String timePattern = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat format = new SimpleDateFormat(timePattern);
        String s = format.format(new Date());
        System.out.println(s);
    }
}

将字符串转换为日期:

public static void main(String[] args) {
   String timePattern = "yyyy-MM-dd HH:mm:ss";
   String timeOne = "2021-07-18 22:53:22";

   SimpleDateFormat format = new SimpleDateFormat(timePattern);
   try {
       Date nowDate = format.parse(timeOne);
       System.out.println(nowDate);
   } catch (ParseException e) {
       System.out.println("日期格式化错误!!,日期为:" + timeOne);
   }
}

2. java.sql.Date

java.sql.Date 是 java.util.Date 类的子类;是针对 SQL 语句使用的,它只包含日期而没有时间部分,一般在读写数据库的时候用,PreparedStament#setDate() 方法的参数和 ResultSet#getDate() 方法的都是 java.sql.Date

如何用 java.sql.Date 获取当前时间?

public class DateTest {

    public static void main(String[] args) {
        java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
        // 2021-07-19
        System.out.println(date);
    }
}

java.util.Date 与 java.sql.Date 互相转换:

public class DateTest {

    public static void main(String[] args) {
        Date date = new Date();
        java.sql.Date dat = new java.sql.Date(date.getTime());
    }
}

3. java.util.Calendar

java.util.Calendar:日历类,是个抽象类

Calendar 实例化的方法:

  1. 创建其子类 GregorianCalendar 的对象
  2. 调用其静态方法 getInstance()

其实这两种方法是一样的:

public class CalendarTest {

    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        // class java.util.GregorianCalendar
        System.out.println(calendar.getClass());
    }
}

常用的方法:

  • get(int field):获取某个时间
  • set():设置某个时间
  • add():在某个时间上,加上某个时间
  • getTime():将 Calendar 类转换为 Date 类
  • setTime():将 Date 类转换为 Calendar 类

field 取值有:

  • DAY_OF_MONTH:这个月的第几天
  • DAY_OF_YEAR:这年的第几天

注意:

  • 获取月份时:一月是 0,二月是1,…
  • 获取星期时:周日是1,周一是2,…

get() 方法

public static void main(String[] args) {
	// 获取到的是当前时间
    Calendar calendar = Calendar.getInstance();

    int i = calendar.get(Calendar.DAY_OF_MONTH);
    // 18,表示是这个月的第 18 天(今天是 2021-07-18)
    System.out.println(i);
}

set(int field, int value) 方法

public static void main(String[] args) {
   Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.DAY_OF_MONTH, 23);
    // 23。将当前时间设置成某个时间,即“2021-07-23”
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
}

add(int field, int value) 方法

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();

    // 给当前时间加上 5 天
    calendar.add(Calendar.DAY_OF_MONTH, 5);
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
}

那么,我想在当前时间加上 2 个月呢?

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();

    // 给当前时间加上 5 天
    calendar.add(Calendar.MONTH, 2);
    System.out.println(calendar.get(Calendar.MONTH));
}

然后,再减去 3 天呢?

 public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();

    // 给当前时间加上 5 天
    calendar.add(Calendar.MONTH, 2);
    // 减去 3 天
    calendar.add(Calendar.DAY_OF_MONTH, -3);
    System.out.println(calendar.get(Calendar.MONTH));
}

getTime() 方法

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();

    calendar.add(Calendar.DAY_OF_MONTH, -3);
    Date time = calendar.getTime();
    // 获取 3 天前的日期
    System.out.println(time);
}

setTime(Date date) 方法

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();
	// 获取 3 天前的日期
    calendar.add(Calendar.DAY_OF_MONTH, -3);
  
	Date nowTime = new Date();
	// 又获取到当前时间
    calendar.setTime(nowTime);
}

你可能感兴趣的:(Java)