본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Java(자바)/Java 기본

자바 날짜 값 밀리세컨드 값으로 변환(Java date milliseconds)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2021. 7. 6.

자바 8부터 제공되는 java.time 패키지의 날짜와 관련된 클래스를 사용하면 쉽게 날짜 계산을 할 수 있습니다.

* 아래 제 포스팅을 참고하시면 다양한 기능을 만날 수 있습니다. : )

https://lts0606.tistory.com/257

 

이번에 필요하였던 기능은 날짜와 관련된 값을 밀리세컨드로 바꾸는 기능이였습니다.

아래 코드처럼 메소드를 호출하면 쉽게 값을 가져올 수 있습니다.

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;

public class TestClass {
    public static void main(String[] args) {
        LocalDateTime.now().atZone(ZoneId.of("Asia/Seoul")).toInstant().toEpochMilli();
    }
}

 

LocalDateTime, LocalDate, YearMonth 등등 java.time 패키지의 날짜와 관련된 클래스에서 atZone이라는 메소드가 공통으로 존재 합니다.

해당 메소드는 ChronoLocalDateTime라는 인터페이스를 위에 언급한 날짜와 관련된 각각의 클래스들이 상속받아 공통으로 구현된 기능 입니다.

그러므로 날짜와 관련된 클래스에서 atZone이라는 메소드를 호출하여 ZoneId값을 넣어주고 toInstant메소드 호출, toEpochMilli메소드를 호출하는 단계로 밀리세컨드값을 구할 수 있습니다.

* 볼 때마다 멋진 자바의 상속기능 입니다...

 

아래 이해를 위해 샘플 코드를 좀 더 추가하여 보았습니다.

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.DayOfWeek;
import java.time.temporal.TemporalAdjusters;

public class TestClass {

    public static void main(String[] args) {

        //사용할 zone 아이디 값 입니다.
        ZoneId zoneid = ZoneId.of("Asia/Seoul");

        //#1. 현재 시간의 값 밀리세컨드 변환
        LocalDateTime.now().atZone(zoneid).toInstant().toEpochMilli();

        //#2. 1달전 일자의 시작일과 마지막일 변환
        LocalDate beforMonth = LocalDate.now().minusMonths(1);
        long beforMonthA = beforMonth.withDayOfMonth(1).atStartOfDay().atZone(zoneid).toInstant().toEpochMilli();
        long beforMonthB = beforMonth.withDayOfMonth(beforMonth.lengthOfMonth()).atStartOfDay().atZone(zoneid).toInstant().toEpochMilli();

        System.out.println("/**");
        System.out.println("저번달 시작 : " + beforMonthA);
        System.out.println("저번달 종료 : " + beforMonthB);

        //#3. 특정 일자의 시작일과 마지막일 변환
        LocalDate parseMonth = LocalDate.parse("2021-01-01");
        long parseMonthA = parseMonth.atStartOfDay().atZone(zoneid).toInstant().toEpochMilli();
        long parseMonthB = parseMonth.withDayOfMonth(parseMonth.lengthOfMonth()).atStartOfDay().atZone(zoneid).toInstant().toEpochMilli();
        
        System.out.println("파싱달 시작 : " + parseMonthA);
        System.out.println("파싱달 종료 : " + parseMonthB);
        System.out.println("**/");
        
        //#4. 해당 시작주의 첫번째 일자 값, 마지막 일자 값 
        long stime = LocalDate.now().atStartOfDay().with(DayOfWeek.MONDAY).atZone(zoneid).toInstant().toEpochMilli();
        long etime = LocalDate.now().atStartOfDay().with(DayOfWeek.SUNDAY).atZone(zoneid).toInstant().toEpochMilli();   	
        
        
        //#5. 다양한 사용 방법(참고 : blog.eomdev.com)
        LocalDateTime nowTime = LocalDateTime.now();
        LocalDateTime time = nowTime
            .with(TemporalAdjusters.firstDayOfYear())       // 이번 년도의 첫 번째 일(1월 1일)
            .with(TemporalAdjusters.lastDayOfYear())        // 이번 년도의 마지막 일(12월 31일)
            .with(TemporalAdjusters.firstDayOfNextYear())   // 다음 년도의 첫 번째 일(1월 1일)
            .with(TemporalAdjusters.firstDayOfMonth())      // 이번 달의 첫 번째 일(1일)
            .with(TemporalAdjusters.lastDayOfMonth())       // 이번 달의 마지막 일
            .with(TemporalAdjusters.firstDayOfNextMonth())  // 다음 달의 첫 번째 일(1일)
            .with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)) // 이번 달의 첫 번째 요일(여기서는 월요일)
            .with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY))  // 이번 달의 마지막 요일(여기서는 마지막 금요일)
            .with(TemporalAdjusters.next(DayOfWeek.FRIDAY))       // 다음주 금요일
            .with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY)) // 다음주 금요일(오늘 포함. 오늘이 금요일이라면 오늘 날짜가 표시 된다.)
            .with(TemporalAdjusters.previous(DayOfWeek.FRIDAY))     // 지난주 금요일
            .with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY));// 지난주 금요일(오늘 포함)
        
    }
    
}

 

해당 년월의 시작일자, 마지막일자 값을 가져오게 한 뒤에 밀리세컨드로 표현하여 보았습니다.

이제 필요한 것은 진짜 잘 되었는지 검증하는 것 입니다.

자바스크립트를 활용하여 해당 값이 맞는지 한번 확인하여 봅니다.

브라우저를 열어서 new Date() 함수에 밀리세컨드 값을 넣어주었습니다.

오..잘 나옵니다!

 

내용이 이상없이 잘 출력되는 것을 볼 수 있습니다.

이상으로 자바를 활용하여 날짜 값을 밀리세컨드 값으로 변환하는 방법에 대해서 살펴 보았습니다.

문의사항 또는 틀린부분은 댓글 또는 메일로 연락하여 주세요!  👻

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글