본문으로 바로가기


yyyy-mm-dd hh:mm:ss LocalDateTime으로 바꾸기

1
LocalDateTime d = LocalDateTime.parse("2016-10-31 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

cs



java hh:mm:ss를 ZoneDateTime을 거쳐 Time으로 바꾸기


1
2
3
4
5
6
7
8
private Time getTime(String isoLocalDatetime){
 
        ZonedDateTime zonedDateTime = getZdt(isoLocalDatetime);
        
        Time time = Time.valueOf(zonedDateTime.toLocalTime());
 
        return time;
}
cs



"10:12:13"을 Time으로 변경

Time.valueOf(LocalTime.parse("10:12:13", DateTimeFormatter.ofPattern("HH:mm:ss")))



LocalTime을 Time으로 변경

 Time time = Time.valueOf(zonedDateTime.toLocalTime());


Java Date + Time으로 LocalDateTime 만들고 비교하기


1
2
3
4
5
6
7
8
9
10
11
private boolean checkDateTime(ImportantGame importantGame){
 
        Date date = importantGame.getShowFinishDate();
        Time time = importantGame.getShowFinishTime();
 
        LocalTime lt = time.toLocalTime();
        LocalDateTime localDateTimeGameUntil = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).with(lt);
        LocalDateTime localDateTimeNow = LocalDateTime.now();
 
        return localDateTimeNow.isBefore(localDateTimeGameUntil);
}
cs


db를 date와 time을 구분을 해놓은 경우 이렇게 썼는데 가장 좋은건 db컬럼을 datetime으로 만드는게 좋을 듯.



정규식으로 특정 시간대 패턴

12시 20분대

12:[2-9][0-9]:[0-9]{2}


11시 40~50분대

11:[4-5][0-9]:[0-9]{2}


12시 22분대, 12시 32분대

12:[2-5][2-3]:[0-9]{2}


17시 22분대, 12시 32분대

17:[2-5][2-3]:[0-9]{2}



java8 LocalDate, LocalDateTime 날짜 dateformat 예제


날짜 처리 할 때 yyyy-MM-dd 이렇게 2018-08-04 이렇게 월, 일에 자릿수가 1자리면 앞에 0을 붙히는 포맷으로 할 때


가끔 쓰는데 한번 처리해놓으면 또 볼 일이 없고

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Test
public void getFullYearMonth() throws Exception {
    // 대상 날짜로 LocalDateTime 만들기
    String dateString = "2018-08-04T10:11:30";
    LocalDateTime parsedLocalDateTime = LocalDateTime.parse(dateString);
 
    // LocalDateTime에서 필요한 내용 필요한 형식으로 뽑기
    String yyyyMMdd = parsedLocalDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    String yyyy = parsedLocalDateTime.format(DateTimeFormatter.ofPattern("yyyy"));
    String MM = parsedLocalDateTime.format(DateTimeFormatter.ofPattern("MM"));
 
    System.out.println(yyyyMMdd);
    System.out.println(yyyy);
    System.out.println(MM);
}
cs


막상 찾아서 로직 짤라면 또 귀찮고 그렇다.

이렇게 하면 한줄로 쓸 수 있음.



yyyy-mm-dd HH:mm:ss 형식을 Java Data Object로 바꿀 때

Date startDatetime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-05-31 11:00:00");


yyyy-mm-dd 형식을 Java Data Object로 바꿀 때

Date startDate = new SimpleDateFormat("yyyy-MM-dd").parse("2017-05-25");



yyyy,MM,dd,HH,mm,s 형식을 Java Data Object로 바꿀 때

Date startDatetime new SimpleDateFormat("yyyy,MM,dd,HH,mm,s").parse("2017,05,29,17,00,0");


String to Date and Date to String

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Date convertedCurrentDate = sdf.parse("2013-09-18");

String date=sdf.format(convertedCurrentDate );

System.out.println(date);


http://stackoverflow.com/questions/18873014/parse-string-date-in-yyyy-mm-dd-format



1
2
3
4
5
String createdAt = "2018-03-29T16:44:46.211Z";
LocalDateTime d = LocalDateTime.parse(createdAt,
                DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
 
Timestamp timestamp = Timestamp.valueOf(d);
cs

ISO8601 시간 바꾸기



Java LocalDateTime 어제 00:00:00 ~ 오늘 23:59:59 만들기

1
2
3
LocalDateTime startDatetime = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.of(0,0,0)); //어제 00:00:00
LocalDateTime endDatetime = LocalDateTime.of(LocalDate.now(), LocalTime.of(23,59,59)); //오늘 24:00:00
 
cs


아래 3단계 과정을 거쳐서 어제 00:00:00을 만들 수 있다.

LocalDateTime.now()로 현재 시간을 만든다. 그담에 LocalDateTime.of()에 .minusDays(1)을 해서 하루를 빼면 어제가 나온다.

LocalTime.of(0,0,0)으로 00:00:00을 만든다.

LocalDateTime.of(date, time)으로 LocalDateTime을 생성한다.


오늘도 마찬가지로 생성하면 된다.



Java8 UTC날짜 스트링을 Asia/Seoul로 바꾸기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ZoneId utcZone = ZoneId.of("UTC");
 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse("2017-09-07 11:00:00", formatter);
ZonedDateTime utcDateTime = dateTime.atZone(utcZone);
System.out.println("utcDateTime = " + utcDateTime);
 
ZonedDateTime zdt = utcDateTime.withZoneSameInstant(ZoneId.of("Asia/Seoul"));
String date = zdt.format(DateTimeFormatter.ISO_LOCAL_DATE);
String time = zdt.format(DateTimeFormatter.ISO_LOCAL_TIME);
 
System.out.println(zdt);
System.out.println(date);
System.out.println(time);
 
Date date1 = Date.from(zdt.toInstant());
System.out.println(date1);
cs


크롤링을 해서 파싱을 하다보면 날짜가 오긴 오는데 UTC로 와서 이걸 다시 한국 시간으로 시간대를 변경 해주어야 할때가 있다.


이럴때 자바8에서 새로 나온 기능인 LocalDate, LocalTime, LocalDateTime, ZonedDateTime 등을 이용하면 비교적 짜임새 있게 날짜를 컨트롤 할 수 있다.


예를들면 썸머타임등을 따로 처리 하지 않아도 알아서 처리를 해주는 등이 편한 기능이다.


인터넷에 예제를 찾아보니까 Date, Calendar 등의 객체를 가지고 하는데 이걸 쓰면 비교적 깔끔하게 바뀐다.



오늘, 30일후 yyyy-MM-dd로 생성

//오늘, 앞으로 30일

Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
endCalendar.add(Calendar.MONTH, 1);

String pattern = "yyyy-MM-dd";
String sStartDate = getCalendarString(startCalendar, pattern);
String sEndDate = getCalendarString(endCalendar, pattern);



private String getCalendarString(Calendar calendar, String pattern) {
SimpleDateFormat format = new SimpleDateFormat(pattern);
return format.format(calendar.getTime());

}


java utc를 local Time(gmt +9)로 변경

//utc 를 gmt +9로 변경 해준다.
TimeZone utc = TimeZone.getTimeZone("UTC");
TimeZone seoul = TimeZone.getTimeZone("Asia/Seoul");
Calendar calendar = Calendar.getInstance(utc);
calendar.set(eventNode.get("startDate").get(1).get("year").asInt()
, eventNode.get("startDate").get(1).get("month").asInt() - 1
, eventNode.get("startDate").get(1).get("date").asInt()
, eventNode.get("startDate").get(1).get("hour").asInt()
, eventNode.get("startDate").get(1).get("minute").asInt()
,0);

String pattern_date = "yyyy-MM-dd";
String pattern_time = "HH:mm:ss";

String localDate = toString(calendar, pattern_date, seoul);

String localTime = toString(calendar, pattern_time, seoul);


end.


댓글을 달아 주세요