Java의 날짜 및 시간 클래스(Date, DateFormat, Calendar)에 대한 자세한 설명

1데이트 수업

1.1 개요

java.util.Date클래스는 밀리초 단위로 정확한 특정 순간을 나타냅니다. Date 클래스의 생성자는 밀리초 값을 날짜 객체로 변환할 수 있습니다 .

1.2 날짜 클래스 구성 방법

  • public Date(): Date 객체를 할당하고 이 객체를 초기화하여 할당된 시간(밀리초 단위)을 나타냅니다.
  • public Date(long date): 1970년 1월 1일 00:00:00 GMT인 "epoch"라는 표준 기본 시간 이후 지정된 밀리초 수를 나타내기 위해 Date 객체를 할당하고 초기화합니다.

팁: 우리는 East 8th District에 있으므로 기본 시간은 1970년 1월 1일 8:00:00입니다.

간단히 말하면, 매개변수 없는 구성을 사용하면 현재 시스템 시간의 밀리초 시간을 자동으로 설정할 수 있으며, 긴 유형 구성 매개변수를 지정하면 밀리초 시간을 사용자 정의할 수 있습니다. 예를 들어:

import java.util.Date;

public class DemoDate {
    
    
    public static void main(String[] args) {
    
    
        // 创建日期对象,把当前的时间转成日期对象
        System.out.println(new Date()); // Sat Sep 19 23:11:21 CST 2020
        // 创建日期对象,把当前的毫秒值转成日期对象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
    }
}

팁: println 메소드를 사용하면 Date 클래스의 toString 메소드가 자동으로 호출됩니다. Date 클래스는 Object 클래스의 toString 메소드를 재정의하고 다시 작성하므로 결과는 지정된 형식의 문자열입니다.

1.3 Date 클래스의 getTime 메소드: 밀리초 수를 반환합니다.

2 DateFormat 클래스

java.text.DateFormat날짜/시간 형식 하위 클래스의 추상 클래스입니다. 이 클래스를 사용하여 날짜와 텍스트 간의 변환을 완료하는 데 도움을 줍니다. 즉, Date 객체와 String 객체 간에 앞뒤로 변환할 수 있습니다.

  • Formatting : 지정된 형식에 따라 Date 객체를 String 객체로 변환합니다. (체재)
  • Parsing : 지정된 형식에 따라 String 객체를 Date 객체로 변환합니다. (파싱)

2.1 SimpleDateFormat 하위 클래스의 생성 방법

DateFormat은 추상 클래스이므로 직접 사용할 수 없으므로 일반적으로 사용되는 하위 클래스가 필요합니다 java.text.SimpleDateFormat. 이 클래스에는 형식 지정 또는 구문 분석 기준을 지정하는 스키마(형식)가 필요합니다. 시공방법은 다음과 같습니다.

  • public SimpleDateFormat(String pattern): 기본 로케일의 지정된 패턴 및 날짜 형식 기호를 사용하여 SimpleDateFormat을 구성합니다.

매개변수 패턴은 날짜 및 시간에 대한 사용자 정의 형식을 나타내는 문자열입니다.

형식 규칙

일반적으로 사용되는 형식 규칙은 다음과 같습니다.

식별자 문자(대소문자 구분) 의미
와이 년도
시간 시간
가리키다
에스 두번째

SimpleDateFormat 객체를 생성하는 코드는 다음과 같습니다.

import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Demo02SimpleDateFormat {
    
    
    public static void main(String[] args) {
    
    
        // 对应的日期格式如:2018-01-16 15:06:38
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }    
}

2.2 DateFormat 클래스의 공통 메소드

DateFormat 클래스의 일반적으로 사용되는 메서드는 다음과 같습니다.

  • public String format(Date date): Date 객체를 문자열로 형식화합니다.
  • public Date parse(String source): 문자열을 Date 객체로 구문 분석합니다.
2.2.1 포맷 방법

format 메소드를 사용하는 코드는 다음과 같습니다.

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把Date对象转换成String
*/
public class Demo03DateFormatMethod {
    
    
    public static void main(String[] args) {
    
    
        Date date = new Date();
        // 创建日期格式化对象,在获取格式化对象时可以指定风格
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = df.format(date);
        System.out.println(str); // 2020年09月19日
    }
}
2.2.2 구문 분석 방법

구문 분석 방법을 사용하는 코드는 다음과 같습니다.

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把String转换成Date对象
*/
public class Demo04DateFormatMethod {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = "2018年12月11日";
        Date date = df.parse(str);
        System.out.println(date); // Tue Dec 11 00:00:00 CST 2018
    }
}

2.3 종합 연습

질문 : 사람이 태어난 일수를 계산하려면 날짜 및 시간 관련 API를 사용해 보세요.

아이디어:

1. 현재 시간에 해당하는 밀리초 값을 가져옵니다.

2. 생년월일에 해당하는 밀리초 값을 가져옵니다.

3. 두 번 빼기(현재 시간 – 생년월일)

암호:

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

/*
 把String转换成Date对象
*/
public class Demo {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        System.out.println("请输入出生日期 格式 YYYY-MM-dd");
        // 获取出生日期,键盘输入
        String birthdayString = new Scanner(System.in).next();
        // 将字符串日期,转成Date对象
        // 创建SimpleDateFormat对象,写日期模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 调用方法parse,字符串转成日期对象
        Date birthdayDate = sdf.parse(birthdayString);
        // 获取今天的日期对象
        Date todayDate = new Date();
        // 将两个日期转成毫秒值,Date类的方法getTime
        long birthdaySecond = birthdayDate.getTime();
        long todaySecond = todayDate.getTime();
        long secone = todaySecond-birthdaySecond;
        if (secone < 0){
    
    
            System.out.println("还没出生呢");
        } else {
    
    
            System.out.println(secone/1000/60/60/24);
        }
    }
}
请输入出生日期 格式 YYYY-MM-dd
2019-09-12
373

3 달력 수업

3.1 개념

java.util.CalendarDate 뒤에 나타나며 많은 Date 메서드를 대체하는 달력 클래스입니다. 이 클래스는 쉽게 액세스할 수 있도록 가능한 모든 시간 정보를 정적 멤버 변수로 캡슐화합니다. Calendar 클래스는 다양한 시간 속성을 얻는데 편리합니다.

3.2 획득 방법

Calendar는 추상 클래스인데, 언어 민감도 때문에 Calendar 클래스는 객체 생성 시 직접 생성되지 않고, 다음과 같이 static 메소드를 통해 생성되어 서브클래스 객체를 반환한다.

달력 정적 방법

  • public static Calendar getInstance(): 기본 시간대 및 로케일을 사용하여 달력을 가져옵니다.

예를 들어:

import java.util.Calendar;

public class Demo06CalendarInit {
    
    
    public static void main(String[] args) {
    
    
        Calendar cal = Calendar.getInstance();
    }    
}

3.3 일반적인 방법

Calendar 클래스의 API 문서에 따르면 일반적인 메서드는 다음과 같습니다.

  • public int get(int field): 주어진 달력 필드의 값을 반환합니다.
  • public void set(int field, int value): 주어진 달력 필드를 주어진 값으로 설정합니다.
  • public abstract void add(int field, int amount): 달력의 규칙에 따라 주어진 달력 필드에 지정된 시간을 더하거나 뺍니다.
  • public Date getTime(): 이 달력 시간 값(시대부터 현재까지의 밀리초 오프셋)을 나타내는 Date 객체를 반환합니다.

Calendar 클래스는 주어진 달력 필드를 나타내는 많은 멤버 상수를 제공합니다.

필드 값 의미
년도 년도
월(0부터 시작, +1과 함께 사용 가능)
DAY_OF_MONTH 해당 월의 일(일)
시간 시간(12시간 형식)
HOUR_OF_DAY 시간(24시간 형식)
가리키다
두번째 두번째
DAY_OF_WEEK 요일(요일, 일요일은 1, -1과 함께 사용 가능)
3.3.1 get/set 메소드

get 메소드는 지정된 필드의 값을 얻는 데 사용되고 set 메소드는 지정된 필드의 값을 설정하는 데 사용됩니다.코드 사용법 데모:

import java.util.Calendar;
public class Demo {
    
    
    public static void main(String[] args) {
    
    
        // 创建Calendar对象
        Calendar cal = Calendar.getInstance();
        // 获取年 
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
2020920
import java.util.Calendar;

public class Demo07CalendarMethod {
    
    
    public static void main(String[] args) {
    
    
        Calendar cal = Calendar.getInstance();
        // 设置年
        cal.set(Calendar.YEAR, 2018);
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
2018920
3.3.2 추가 메소드

add 메소드는 지정된 달력 필드의 값을 더하거나 뺄 수 있으며, 두 번째 매개변수가 양수이면 오프셋을 더하고, 음수이면 오프셋을 뺍니다. 다음과 같은 코드:

import java.util.Calendar;

public class Demo08CalendarMethod {
    
    
    public static void main(String[] args) {
    
    
        Calendar cal = Calendar.getInstance();
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
        // 使用add方法
        cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
        cal.add(Calendar.YEAR, -3); // 减3年
        // 获取年
        year = cal.get(Calendar.YEAR);
        // 获取月
        month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
20209202017922
3.3.3 getTime 메소드: 해당 Date 객체를 반환합니다.

Calendar의 getTime 메소드는 밀리초 시간을 가져오지 않고 해당 Date 객체를 가져옵니다.

import java.util.Calendar;
import java.util.Date;

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        System.out.println(date); 
    }
}
Sun Sep 20 08:44:18 CST 2020

팁:

서부 주는 일요일(1)과 월요일(2)에 시작하고, 중국 주는 월요일에 시작하므로 -1을 사용할 수 있습니다.

Calendar 클래스에서 월은 1월~12월을 나타내는 0~11로 표시됩니다(+1 사용 가능).

날짜는 크기와 관련이 있으며, 시간이 늦을수록 시간이 커집니다.

Je suppose que tu aimes

Origine blog.csdn.net/sc179/article/details/108687144
conseillé
Classement