java8 날짜 시간 API 사용 및 포맷 방법:
현재 시간에 대한 N일 LocalDate tomorrow = LocalDate.now().plusDays(1);//일주일 후now.plusWeeks(1)//이틀 전now.minusDays(2)//한 달 증가하면 2017-02-31이 나타나지 않고 그 달의 마지막 유효일, 즉 2017-02-28 LocalDate로 돌아갑니다.of(2017, 1, 31).plus Months(1) is Before is After는 두 개의 Local Date를 비교하여 is Leap Year가 윤년인지 아닌지를 판단한다.
LocalTime(로컬 시간) LocalTime은 18:00:00과 같은 하루 중 어느 시간을 나타냅니다.LocaTime은 LocalDate와 유사하며 API도 유사합니다.주의해야 할 것은 로컬타임 자체가 AM인지 PM인지에 관심이 없고 포맷 프로그램이 이 일을 책임진다는 것이다.LocalDateTime (로컬 날짜 시간) LocalDateTime 은 시간대를 정하는 데 적합한 날짜와 시간을 표시합니다.시간대를 뛰어넘는 문제에 적합하지 않다.
일반적인 포맷 현재 시간: (일반적이고 중요한) DateTimeFormatter.ISO_LOCAL_DATE.format(LocalDate.now() 서식 적용 이후의 값은 2018-09-25
//20170101 이 방법은 시간 스탬프를 만드는 데 사용할 수 있습니다. DateTimeFormatter.BASIC_ISO_DATE.format(LocalDate.of(2017, 1, 1));
//2017-01-01T09:10:00 DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(LocalDateTime.of(2017, 1, 1, 9, 10, 0));
사용자 정의 날짜 포맷//2017-02-27 22:48:52 DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now())
/**********************************************************************************Instant는 정확한 시간을 의미하며 타임 스핀은 수많은 시점으로 구성되어 있습니다.정적 메서드 사용 Instant.now()는 현재 시점을 가져옵니다.
코드 실행 시간을 계산하는 방법은 다음과 같습니다.
Instant start = Instant.now();//이 시간은 국제시간에서 8시간 동안 중국 시간으로 오프셋을 처리해야 하는doSomething()이다.
Instant end = Instant.now();
Duration timeElapsed = Duration.between(start, end); long millis = timeElapsed.toMillis(); System.out.println("millis = "+ millis);
@Query("select new map(a.loginName,a.mobile,a.email,a.userId) from UserInfo a where a.userId in :userIds")
날짜 포맷에 대한 작업 요구 사항 1: 문자열을 LocalDateTime 포맷으로 변환
public static void main(String[] args) {
String aa="2019-01-02 22:13:10";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime time = LocalDateTime.parse(aa, dateTimeFormatter);
System.out.println(time);
}
:
2019-01-02T22:13:10
요구 2: 문자열을 롱 형식으로 바꾸는 시간 스탬프
public static void main(String[] args) {
String aa="2019-01-02 22:13:10";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime time = LocalDateTime.parse(aa, dateTimeFormatter);
long l = time.toEpochSecond(ZoneOffset.of("+8"));
System.out.println(l);
}
:1546438390
요구 사항 3: LocalDateTime을 String 형식의 시간 형식으로 변환
public static void main(String[] args) {
String aa="2019-01-02 22:13:10";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime time = LocalDateTime.parse(aa, dateTimeFormatter);
String format = time.format(dateTimeFormatter);
System.out.println(format);
}
필요4: 연월일을 나누어 주고 시간 형식으로 포맷된 문자열을 제공합니다
public static void main(String[] args) {
//
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("+8"));
ZonedDateTime time = ZonedDateTime.parse("2019-03-05" + " 00:00:00",formatter).withHour(12).withMinute(0).withSecond(0);
String format = time.format(formatter);
System.out.println(format);
}
2019-03-05 12:00:00
Instant LocalDateTime ZonedDateTime 차이점 /**
* Instant 0 8 UTC
* Z
*2019-04-01T02:36:38.610Z
*LocalDateTime
*2019-04-01T10:36:38.610
* ZonedDateTime
*/2019-04-01T10:36:38.610+08:00[Asia/Shanghai]
yyy-MM-dd HH:mm:ss 형식의 시간을 HH:mm로 변환DateTimeFormatter formatterFull = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("+8"));
DateTimeFormatter formatterHHmm = DateTimeFormatter.ofPattern("HH:mm");
ZonedDateTime time = ZonedDateTime.parse(operateDate +" 00:00:00",formatterFull).withHour(hourTaskDTO.getOperateHour());
dayEnergyPointVM.setSortDate(time.format(formatterHHmm));
/**
* Instant 0 8 UTC
* Z
*2019-04-01T02:36:38.610Z
*LocalDateTime
*2019-04-01T10:36:38.610
* ZonedDateTime
*/2019-04-01T10:36:38.610+08:00[Asia/Shanghai]
DateTimeFormatter formatterFull = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("+8"));
DateTimeFormatter formatterHHmm = DateTimeFormatter.ofPattern("HH:mm");
ZonedDateTime time = ZonedDateTime.parse(operateDate +" 00:00:00",formatterFull).withHour(hourTaskDTO.getOperateHour());
dayEnergyPointVM.setSortDate(time.format(formatterHHmm));