2016-11-25 2 views
0

文字列からのUTCオフセットを使用してタイムスタンプデータをカサンドラタイムスタンプ列に格納します。私の文字列はyyyy-MM-dd HH:mm:ssZのようなものです。ここで、Zは+0100のような文字列です。私が望むのは、私のUTCオフセットを含むevent_timeの列にタイムスタンプとして保存するだけです。 DataStax Javaのドライバを使用する:文字列からカサンドラへのUTCオフセットを含むタイムスタンプを格納します

dateがこのように計算され
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)); 

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; 

常にゼロに設定されたオフセットを持つので、問題は、私はいつも2016-11-25 13:24:07+0000のような値を持って、です。ここでデータフォーマットhttps://docs.datastax.com/en/cql/3.1/cql/cql_reference/timestamp_type_r.htmlをチェックして、どこが間違っているのか理解できません。カサンドラにタイムゾーンを使用させたくないのですが、UTCオフセットをタイムスタンプ値に「注入」したいと思っています。誰も私にこれをする方法を教えてもらえますか?

+0

あなたのevent_timeはCassandraに正しく保存されています。 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()関数を使用します。

関連する問題