-
날짜 시간 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(2020, 12, 12).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(2015, 5, 5)); // 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(2, 30); // 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