자바 시간 대 변환 및 Date 류 실현 원리 분석

이 글 은 자바 시간 대 전환 및 Date 류 실현 원리 에 대한 분석 을 소개 합 니 다.이 글 은 예시 코드 를 통 해 매우 상세 하 게 소개 되 어 있 으 며 여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 고 있 으 므 로 필요 한 분 들 은 참고 하 시기 바 랍 니 다.
시간 대 설명
지구 표면 은 경선 에 따라 동쪽 에서 서쪽 으로 한 구역 으로 나 뉘 어 인접 지역 의 시간 차 이 를 1 시간 으로 규정 하고 있다.같은 지역 내 동쪽 끝 과 서쪽 끝 에 있 는 사람들 은 해 가 뜨 는 것 을 보 는 시간 이 최대 1 시간 에 불과 하 다.사람들 이 한 구역 을 넘 으 면 자신의 시 계 를 1 시간(서쪽 으로 1 시간,동쪽 으로 1 시간)교정 하고 몇 구역 을 넘 으 면 몇 시간 을 더 하거나 줄 이기 때문에 같은 시간 에 서로 다른 시간 대 에 표시 하 는 시간 은 다르다.
시간의 표시
우 리 는 평소에 시간 을 표시 할 때 보통 포맷 된 문자열 로 시간 을 표시 합 니 다.예 를 들 어'2019-11-5 20:05'라 는 문자열 은 2019 년 11 월 5 일 20 시 05 분 을 표시 합 니 다.그러나 여기 에는 내 포 된 전제 가 있다.시 구 는 자신 이 현재 있 는 시간 대 이다.즉,동 팔 구 의 사람들 은 이 시간 을 보고 동 팔 구 의 20:05 라 고 생각 하고 동 구 구 의 사람들 은 동 구 의 20:05 라 고 생각 하 는데 사실은 이 두 시간 은 한 시간 차이 가 난다.따라서 특정한 시간 을 정확하게 표시 하고 시간 대 정 보 를 더 해 야 한다.예 를 들 어'2019-11-5 20:05+8:00'이라는 문자열 은 어느 시간 대 에 나 동 8 구 의 시간 을 나타 내 는 것 을 알 수 있다.
타임 스탬프
타임 스탬프 는 시간 간격 을 나타 내 는데 0 시간 대 를 보면'1970-1-1 00:00+0:00'부터 현재(2019-11-5 12:05+0:00)까지 의 시간 간격 을 나타 내 고 동 팔 구 를 보면'1970-1-1 08:00+8:00'부터 현재(2019-11-5 20:05+8:00)까지 의 시간 간격 을 나타 낸다.
간격=현재-기점,현재 와 기점 이 8 시간 차이 가 나 기 때문에 시간 간격 은 같 습 니 다.같은 이치 입 니 다.임의의 시간 대 에서 현재 이 시간의 시간 스탬프 는 모두 같 습 니 다.
4.Date 클래스 와 시간 스탬프
자바 의 Date 클래스 에 실제 저 장 된 것 은 어느 시간의 시간 스탬프 이기 때문에 같은 시간 에 임의의 시간 대 에서 가 져 온 Date 대상 은 같 습 니 다.Simple DateFormat 을 사용 하여 날 짜 를 포맷 할 때 기본 값 은 현재 시스템 시간 대 로 날 짜 를 포맷 하기 때문에 같은 시간 대 에 다른 사람 이 날 짜 를 포맷 해서 얻 은 결과 에 시차 가 있 습 니 다.
그래서 다음 코드 는 동 8 구 와 동 9 구 에서 얻 은 출력 이 한 시간 차이 가 났 지만 그들의 Date 대상 은 실제 적 으로 같은 시간 을 나 타 냈 다.

public class TestDate {
  public static void main(String[] args) {
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date=new Date(1572960924868L);//             
    System.out.println(sdf.format(date));
  }
}
5.자바 의 시간 대 전환
Simple DateFormat 의 대상 은 시간 대 를 설정 할 수 있 습 니 다.같은 Date 대상 은 Simple DateFormat 을 통 해 시간 대 를 변환 할 수 있 습 니 다.

  @Test
  public void test2(){
    Date date=new Date(1572960924868L);
    SimpleDateFormat sdf8=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf8.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));//        
    System.out.println("      :"+sdf8.format(date));//       

    SimpleDateFormat sdf9=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf9.setTimeZone(TimeZone.getTimeZone("GMT+9:00"));//        
    System.out.println("      :"+sdf9.format(date));//       
  }
출력 결 과 는 다음 그림 과 같 습 니 다.

같은 시각 1572960924868 에서 Date 대상 으로 전환 한 다음 Simple DateFormat 을 통 해 시간 대 를 변환 하고 시간 문자열 로 포맷 하여 출력 합 니 다.
따라서 실제 응용 프로그램 에서 시간 을 저장 해 야 하 는 문제 가 발생 했 을 때 데이터베이스 에 시간 에 대응 하 는 시간 스탬프 를 저장 할 수 있다.그러면 데이터 베 이 스 를 저장 할 때 시간 대 에 문제 가 없 을 것 이다.응용 프로그램 에서 시간 이 필요 할 때 이 시간 스탬프 를 Date 로 바 꾸 고 Simple DateFormat 을 통 해 필요 한 시간 대로 전환한다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기