Solrj의 날짜와 시간 해석 방법은 매우 위험하다

2450 단어 SolrJava
Solr가 첨부한 프로그램 라이브러리, Solrj에는 SimpleDateFormat 클래스 DateUtil.parseDate() 를 사용하지 않고 문자열을 Date형으로 해석하는 편리한 방법이 있지만, 상당히 위험한 것 같습니다.
현재 확인된 현상
Solrj4.10.1을 통해 확인
1. Date 클래스를 toString()으로 출력하는 문자열(EEE MMMd HH ss z yy 형식)은 12시에 이 메서드를 사용할 때 시간 부분이 0으로 변경됩니다.
java
import org.apache.solr.common.util.DateUtil;

public class DateTest {
  public static void main(String[] args) throws ParseException {
    String dateStr = "Fri Oct 24 12:11:57 JST 2014";
    System.out.println(DateUtil.parseDate(dateStr));
  }
}
출력 결과
Fri Oct 24 00:11:57 JST 2014
.
2. yyyy-MM-ddHss의 문자열은 모두 yyy-MM dd09:00으로 바뀌었습니다.
java
import org.apache.solr.common.util.DateUtil;

public class DateTest {
  public static void main(String[] args) throws ParseException {
    String dateStr = "2014-10-24 18:00:00";
    System.out.println(DateUtil.parseDate(dateStr));
  }
}
출력 결과
Fri Oct 24 09:00:00 JST 2014
.
설치 확인 후 1.의 이벤트는 EEE MMMd HH sszyy 포맷이'EEE MMd hhh sszyyy'로 시간 부분에서 AM, PM의'hh'를 구분하지 않기 때문이다.
2.왜냐하면 처리할 형식은 다음과 같은 순서에 따라
yyyy-MM-dd'T'HH:mm:ss'Z'
yyyy-MM-dd'T'HH:mm:ss
yyyy-MM-dd
yyyy-MM-dd hh:mm:ss
yyyy-MM-dd HH:mm:ss
EEE MMM d hh:mm:ss z yyyy
EEE MMM d HH:mm:ss yyyy
EEEE, dd-MMM-yy HH:mm:ss zzz
EEE, dd MMM yyyy HH:mm:ss zzz
원인은 yyyy-MM-ddhhss형식(또는 yyyy-MM-ddHss형식)을 처리하기 전에'yyy-MM-dd'형식으로 해석한 것 같다.
지금은 Solrj의 날짜와 시간 서비스를 사용하지 않는 것이 좋습니다.

좋은 웹페이지 즐겨찾기