2016-07-25 6 views
0

내 솔라에 데이터가 있습니다 :Using the Solr Administration User Interface, modifyTime은 "2016-04-20T13 : 58 : 35.805Z"입니다.solrj를 사용하여 8 시간의 날짜 차이 확인

사용 solrj : enter image description here에서, modifyTime는 "수요일 4월 20일 중부 표준시 21시 58분 35초 2016"입니다.

저는 solr6을 사용하고 있습니다. 왜?

+0

두 컴퓨터 (Solr과 로컬 컴퓨터를 호스팅하는 컴퓨터)에서 다른 표준 시간대를 사용하고 로컬 컴퓨터가 CST를 기본 표준 시간대로 사용하기 때문에 Solr 컴퓨터의 기본 표준 시간대를 확인할 수 있습니까? – NAIT

답변

2

solr 관리 사용자 인터페이스에서 오는 modifyTime 데이터 형식은 datetime 문자열의 끝에서 Z로 이해할 수 있습니다. 이는 날짜의 문자열 표현이 UTC임을 나타냅니다. 중앙중국 표준시, 귀하의 경우는 + 8 시간으로 보인다 - modifyTime 데이터 형식에서 오는 한편

2016-04-20T13:58:35.805Z 

는 CST이다.

Wed Apr 20 21:58:35 CST 2016 

이 때문에 java.util.Date은 시간 영역이없는 자바 성가신 나쁜 기능의 일이 아직이 toString 메소드는 JVM의 현재 기본 시간대를 적용합니다. CST (시간대 약어)

+0

존이 중부 표준시가 아닌 중국 표준시라고 생각합니다. –

+0

고마워요 @BasilBourque, 맞아요, 왜 CST에 왜 이렇게 많은 시간이 있었는지 궁금 해서요 :) –

+0

대단히 고마워요! – finemi

0

중국 표준시 (CST)의 의미에 대한 제안을 @BasilBourque에

java.util.Date date = (java.util.Date) doc.getFieldValue("modifyTime"); 
DateTime dateTimeUtc = new DateTime(date, DateTimeZone.UTC); 
String output = dateTimeUtc.toString(); 

편집

감사

answer by Alfredo가 정확하지만, 하나의 가정. 그 대답은 중부 표준시를 언급하지만 그 구역은 의 뒤에 UTC (7 또는 6 시간) 인 반면 질문의 데이터는 의 앞에 UTC입니다. 그래서 여기에 CSTChina Standard Time을 가리키며 UTC보다 8을 가리키는 것으로 추정됩니다.

이 혼란은 왜 CST과 같은 3-4 자 약어를 사용해서는 안되는지를 보여줍니다. 표준 시간대가 아닌 표준 시간대가 아니며 고유하지도 않습니다 (여기에서 알 수 있듯이). 대신 continent/region 형태로 proper tz/IANA time zones을 사용하십시오.

java.time

문제는 이전 날짜 - 시간 클래스의 사용이다. 이러한 저조한 ​​설계와 악명 높은 클래스는 Java 8 이상에서 java.time 프레임 워크로 대체되었습니다.

그 문자열은 Instant에 의해 직접 구문 분석되어 UTC의 값을 가져야합니다.

Instant instant = Instant.parse("2016-04-20T13:58:35.805Z"); 

전화 toStringISO 8601 표준에 따라 형식이 다시 문자열의 같은 종류를 얻을 수 있습니다.

특정 지역의 렌즈 wall-clock time을 통해 동일한 시간대를 보려면 시간대를 적용하십시오. ZoneId을 적용하여 ZonedDateTime 개체를 가져옵니다.America/Montreal의 예를 들어

는 벽 시계 시간은 UTC로 4 시간입니다, 그래서 시간은 09 대신 13입니다.

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = instant.atZone(zoneId); 

2016-04-20T09 : 58 : 35.805-04 : 00 [미국/몬트리올]

모두 InstantZonedDateTime 및 타임 라인에 동시에 동일한 점을 나타낸다.

+0

감사합니다! solrj를 사용할 때 가장 좋은 해결책은 무엇입니까? 매번 결과를 수동으로 변경해야합니다. solrj의 결과를 변경하고 싶습니다. 예를 들어 DateTime 또는 CST를 반환하도록합니다. – finemi