ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 날짜 시간 LocalDate, LocalTime, LocalDateTime, OffsetDateTime
    ■ 개발 정리/JAVA 2019. 5. 22. 14:23

     

    - 사용법

     

    LocalDate currentDate = LocalDate.now(); // 시스템의 현재 날짜 정보 2018-07-26

    LocalDate myDate = LocalDate.of(int year, int month, int datOfMonth); //년,월,일

     

    getYear();

    getMonth(); (Month 열거값나옴 JANUARY, FEBRUARY)

    getMonthValue();   월(1,2,3,...)

    getDayOfYear();     년의 몇 번째 일

    getDayOfMonth();  월의 몇번째 일

    getDayOfWeek();   요일(MONDAY, TUESDAY,...)

    isLeapYear(); 윤년여부

     

    LocalTime currentTime = LocalTime.now();    // 시스템의 현재 시간 정보. 결과 : 16:24:02.408

    LocalTime targetTime = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);

     

    int    getHour()    시간

    int    getMinute()    분

    int    getSecond()    초

    int    getNano()    나노초

     

    LocalDateTime 시간,날짜 동시에 필요할 때 사용.

    LocalDateTime currentDateTime = LocalDateTime.now();    // 시스템의 현재 날짜와 시간 정보. 결과 : 2018-07-26T16:34:24.757

    LocalDateTime targetDateTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);

    ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));

    ZonedDateTime seoulDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));

     

     

    해당 월의 마지막 달 구하기

    // YearMonth 사용

    YearMonth yearMonth = YearMonth.form(LocalDate.now());

     

    해당 월의 일 수(int)

    int dayOfMonthCnt = yearMonth.lengthOfMonth();

     

    해당 월의 마지막 날(LocalDate)

    LocalDate dateOfMonth = yearMonth.atEndOfMonth();

     

     

     

    날짜/시간 변환

     

    LocalDate -> String

    LocalDate.of(20201212).format(DateTimeFormatter.BASIC_ISO_DATE); // 20201212

     

    LocalDateTime -> String

    LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2018-07-26 00:42:24

     

    LocalDateTime -> java.util.Date

    Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()); //Thu Jul 26 01:00:30 KST 2018

     

    LocalDate -> java.sql.Date

    Date.valueOf(LocalDate.of(201555)); // 2018-07-26

     

    LocalDateTime -> java.sql.Timestamp

    Timestamp.valueOf(LocalDateTime.now()); // 2018-07-26 01:06:55.323

     

    String -> LocalDate

    LocalDate.parse("2002-05-09"); // 2002-05-09

    LocalDate.parse("20081004", DateTimeFormatter.BASIC_ISO_DATE); // 2008-10-04

     

    String -> LocalDateTime

    LocalDateTime.parse("2007-12-03T10:15:30"); // 2007-12-03T10:15:30

    LocalDateTime.parse("2010-11-25 12:30:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2010-11-25T12:30

     

    java.util.Date -> LocalDateTime

    LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault()); // 2018-07-26T01:16:46.755

     

    java.sql.Date -> LocalDate

    new Date(System.currentTimeMillis()).toLocalDate(); // 2018-07-26

     

    java.sql.Timestamp -> LocalDateTime

    new Timestamp(System.currentTimeMillis()).toLocalDateTime(); // 2018-07-26T01:20:07.364

     

    LocalDateTime -> LocalDate

    LocalDate.from(LocalDateTime.now()); // 2018-07-26

     

    LocalDate -> LocalDateTime

    LocalDate.now().atTime(230); // 2018-07-26T02:30

     

    더하기, 빼기

    - xxxxYears( ), xxxxDays( ), xxxxHours( ), ... 등 으로 연산이 가능

    localDateTime.plusDays(1);

    localDateTime.minusDays(1);



     

    비교

    isAfter( ), isBefore( ), isEqual( ) 를 사용하여 비교

     

    LocalDateTime localDateTime = LocalDateTime.now(); //  2017-02-07T20:00:00

    LocalDateTime compareDateTime = localDateTime.plusDays(1//  2017-02-08T20:00:00

     

    localDateTime.isBefore(compareDateTime) // true

     

     

     

    UTC 기준 시간 및 날짜 사용 할때 : OffsetDateTime 사용

     

    String koreaTime = OffsetDateTime.of(LocalDateTime.now(), ZoneOffset.of("+9"));

     

     

     

    NTP 타임서버에서 시간 값 가져오기

     

    라이브러리가 필요

     

    // Maven

    <dependency>

        <groupId>commons-net</groupId>

        <artifactId>commons-net</artifactId>

        <version>3.6</version>

    </dependency>

     

     

    // Gradle
    compile group: 'commons-net', name: 'commons-net', version: '3.6'

     

    // 사용 Controller

    @RestController

    public class TestController {

        private static final String TIME_SERVER = "pool.ntp.org";

        

        @Autowired

        private DateRepository dateRepository;

        

        @GetMapping("/")

        public String test() {

            NTPUDPClient timeClient = new NTPUDPClient();

            timeClient.setDefaultTimeout(1000);

            try {

                timeClient.open();

                InetAddress address = InetAddress.getByName(TIME_SERVER);

                TimeInfo timeInfo = timeClient.getTime(address);

                long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime(); //서버에서 시간 가져오는 코드

                Date date = new Date(returnTime);

                LocalDateTime localDateTime = 

                        date.toInstant()

                        .atZone(ZoneId.systemDefault())

                        .toLocalDateTime();//date to LocalDateTime

                

                System.out.println("TimeServer : " + localDateTime);//Naver 시계랑 동일!

                System.out.println("Local PC : " + LocalDateTime.now());

            } catch (SocketException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (UnknownHostException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            return "hello world";

        }

        

    }

     

    NTPUDPClient를 사용해서 TIME_SERVER "pool.ntp.org" 라는 타임 서버에서 날짜를 가져올 수 있다.

     

     

     

     

    내용 참고 :  https://heowc.tistory.com/42

     

    Java - time package(LocalTime, LocalDate, LocalDateTime,...)

    이번 글은 java 1.8에서 추가된 시간관련 패키지인 time 패키지에 대한 글 입니다. 기존 Date는 Deprecated 되어 권장하지 않습니다. 그 이후로 Calander를 이용하여 많이 작업을 합니다. 하지만 이 또한 자체 메..

    heowc.tistory.com

     

    내용 참고 : https://jeong-pro.tistory.com/163  [기본기를 쌓는 정아마추어 코딩블로그]

     

    JAVA에서 날짜,시간 제대로 사용하는 LocalDate, LocalTime, LocalDateTime (NTP 시간 서버에서 정확한 시간 받아오기, json object 받기, JPA 테스트 with LocalDateTime)

    아직도 Calendar, Date 사용하니? 자바에서 아직도 Calendar.getInstance해서 시간/날짜를 표현하는 프로그래머가 있을까? 처음 공부할 때나 단순하게 표현해야할 때는 사용할 수 있지만 단점이 극명한 클래스라..

    jeong-pro.tistory.com

     

    '■ 개발 정리 > JAVA' 카테고리의 다른 글

    JAVA 대문자 to 소문자, 소문자 to 대문자  (0) 2020.12.17
    명명규칙(Convention)  (0) 2019.08.21
    [JAVA] Integer 비교  (0) 2018.12.19
    [JAVA] 어제(전날)날짜 구하기  (0) 2018.11.09
    자바(JAVA) 소수점 처리  (0) 2018.08.30
Designed by Tistory.