2016-11-25 7 views
0

string에서 Cassandra 타임 스탬프 열로 UTC 오프셋을 사용하여 타임 스탬프 데이터를 저장하려고합니다. 내 문자열은 yyyy-MM-dd HH:mm:ssZ과 같습니다. 여기서 Z는 +0100과 같은 문자열입니다. 내가 원하는 것은 내 UTC 오프셋을 포함하여 열 event_time에 타임 스탬프로 저장하는 것입니다. 사용 DataStax 자바 드라이버 : date이 방법으로 계산UTC가 문자열에서 Cassandra로 오프셋 된 시간 소인

PreparedStatement statement = session.prepare(
      "INSERT INTO " + table + "(" + frame + ", device_uuid, event_time, value)" 
        + "VALUES (?,?,?,?);"); 
      BoundStatement boundStatement = new BoundStatement(statement); 
      session.execute(boundStatement.bind(frame_val, uuid, date, value)); 

: 항상 0으로 설정 오프셋과 함께, 그래서 2016-11-25 13:24:07+0000 같은

String str = "2016-11-22 02:33:25+0100"; 
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); 
    Date date = null; 
    try { 
     date = formatter.parse(str); 
    } catch (ParseException e) { 
     System.out.println("Error in parsing date"); 
     e.printStackTrace(); 
    } 
    return date; 

문제는, 내가 항상 가지고 값을; 여기에서 데이터 형식 https://docs.datastax.com/en/cql/3.1/cql/cql_reference/timestamp_type_r.html을 확인했는데 어디서 잘못되었는지 이해할 수 없습니다. 문제는 카산드라가 타임 존을 사용하는 것을 원하지 않지만 타임 스탬프 값에 UTC 오프셋을 "주입"하려고합니다. 아무도 이걸하는 방법을 가르쳐 줄 수 있습니까?

+0

귀하의 event_time은 (는) 카산드라에 올바르게 저장됩니다. GMT로 표시되는 시간입니다. –

+0

http://stackoverflow.com/questions/32778433/cassandra-cqlsh-not-displaying-correct-timezone –

답변

0

Joda Time 패키지를 사용하면 쉽게 얻을 수 있습니다.

import org.joda.time.DateTime; 
import org.joda.time.format.DateTimeFormat; 
import org.joda.time.format.DateTimeFormatter; 

public Class Util { 
static DateTimeFormatter formatter; 

    public static DateTime strToDateTime(String s, String format) { 
     DateTime retValue = null; 
     formatter = DateTimeFormat.forPattern(format); 
     try { 
      retValue = formatter.withOffsetParsed().parseDateTime(s); 
     } catch (Exception e) { 
      return retValue; 
     } 
     return retValue; 
    } 
} 


@Test 
public void strToDateTime() throws Exception { 
    DateTime s = Util.strToDateTime("2016-11-22 02:33:25+0100", "yyyy-MM-dd HH:mm:ssZ"); 
    System.out.println(s); 
} 

은 날짜 문자열 값을 구문 분석을 시도하기 전에 withOffsetParsed() 포맷터와 기능을 사용하십시오.