public class DateTimeCodec extends TypeCodec.AbstractTupleCodec<org.joda.time.DateTime>
TypeCodec
that maps DateTime
to CQL tuple<timestamp,varchar>
, providing a
pattern for maintaining timezone information in Cassandra.
Since Cassandra's timestamp
type preserves only milliseconds since epoch, any
timezone information would normally be lost. By using a tuple<timestamp,varchar>
a timezone ID can be persisted in the varchar
field such that when the value
is deserialized the timezone is preserved.
IMPORTANT: this codec's format
method formats
timestamps as CQL literal strings using an ISO-8601 format that includes milliseconds.
This format is incompatible with Cassandra versions < 2.0.9.
TypeCodec.AbstractCollectionCodec<E,C extends Collection<E>>, TypeCodec.AbstractMapCodec<K,V>, TypeCodec.AbstractTupleCodec<T>, TypeCodec.AbstractUDTCodec<T>, TypeCodec.PrimitiveBooleanCodec, TypeCodec.PrimitiveByteCodec, TypeCodec.PrimitiveDoubleCodec, TypeCodec.PrimitiveFloatCodec, TypeCodec.PrimitiveIntCodec, TypeCodec.PrimitiveLongCodec, TypeCodec.PrimitiveShortCodec
definition
Constructor and Description |
---|
DateTimeCodec(TupleType tupleType)
Creates a new
DateTimeCodec for the given tuple, using a default parser and a default
printer to handle the timestamp component of the tuple. |
DateTimeCodec(TupleType tupleType,
org.joda.time.format.DateTimeFormatter parser,
org.joda.time.format.DateTimeFormatter printer)
Creates a new
DateTimeCodec for the given tuple, using the provided parser and printer to format and print the
timestamp component of the tuple. |
Modifier and Type | Method and Description |
---|---|
protected org.joda.time.DateTime |
deserializeAndSetField(ByteBuffer input,
org.joda.time.DateTime target,
int index,
ProtocolVersion protocolVersion)
Deserialize an individual field and set it on an object, as part of deserializing the whole
object from a CQL tuple (see
TypeCodec.AbstractTupleCodec.deserialize(ByteBuffer, ProtocolVersion) ). |
protected String |
formatField(org.joda.time.DateTime value,
int index)
Format an individual field in an object as a CQL literal, as part of formatting the whole
object (see
TypeCodec.AbstractTupleCodec.format(Object) ). |
protected org.joda.time.DateTime |
newInstance()
Return a new instance of
T . |
protected org.joda.time.DateTime |
parseAndSetField(String input,
org.joda.time.DateTime target,
int index)
Parse an individual field and set it on an object, as part of parsing the whole object (see
TypeCodec.AbstractTupleCodec.parse(String) ). |
protected ByteBuffer |
serializeField(org.joda.time.DateTime source,
int index,
ProtocolVersion protocolVersion)
Serialize an individual field in an object, as part of serializing the whole object to a CQL
tuple (see
TypeCodec.AbstractTupleCodec.serialize(Object, ProtocolVersion) ). |
accepts, deserialize, format, parse, serialize
accepts, accepts, accepts, ascii, bigint, blob, cboolean, cdouble, cfloat, cint, counter, custom, date, decimal, duration, getCqlType, getJavaType, inet, list, map, set, smallInt, time, timestamp, timeUUID, tinyInt, toString, tuple, userType, uuid, varchar, varint
public DateTimeCodec(TupleType tupleType)
DateTimeCodec
for the given tuple, using a default parser and a default
printer to handle the timestamp component of the tuple.
The default formatter and printer produce and parse CQL timestamp literals of the following form:
Z
(UTC), e.g. 2010-06-30T01:20:47.999Z
; note that timestamp components are always
printed in UTC time, hence the zone ID Z
.
Note that it is not possible to customize the parsing and printing of the zone component of
the tuple. This codec prints either a zone offset such as -07:00
, or a zone ID such as
UTC
or Europe/Paris
, depending on what is the best information is available.
tupleType
- The tuple type this codec should handle. It must be a tuple<timestamp,varchar>
.IllegalArgumentException
- if the provided tuple type is not a tuple<timestamp,varchar>
.public DateTimeCodec(TupleType tupleType, org.joda.time.format.DateTimeFormatter parser, org.joda.time.format.DateTimeFormatter printer)
DateTimeCodec
for the given tuple, using the provided parser
and printer
to format and print the
timestamp component of the tuple.
Use this constructor if you intend to customize the way the codec parses and formats timestamps. Beware that Cassandra only accepts timestamp literals in some of the most common ISO-8601 formats; attempting to use non-standard formats could result in invalid CQL literals.
Note that it is not possible to customize the parsing and printing of the zone component of
the tuple. This codec prints either a zone offset such as -07:00
, or a zone ID such as
UTC
or Europe/Paris
, depending on what information is available.
tupleType
- The tuple type this codec should handle. It must be a tuple<timestamp,varchar>
.parser
- The parser
to use to parse the timestamp component of
the tuple. It should be lenient enough to accept most of the ISO-8601 formats accepted by
Cassandra as valid CQL literals.printer
- The printer
to use to format the timestamp component
of the tuple. This printer should be configured to always format timestamps in UTC (see
DateTimeFormatter.withZoneUTC()
.IllegalArgumentException
- if the provided tuple type is not a tuple<timestamp,varchar>
.protected org.joda.time.DateTime newInstance()
TypeCodec.AbstractTupleCodec
T
.newInstance
in class TypeCodec.AbstractTupleCodec<org.joda.time.DateTime>
T
.protected ByteBuffer serializeField(org.joda.time.DateTime source, int index, ProtocolVersion protocolVersion)
TypeCodec.AbstractTupleCodec
TypeCodec.AbstractTupleCodec.serialize(Object, ProtocolVersion)
).serializeField
in class TypeCodec.AbstractTupleCodec<org.joda.time.DateTime>
source
- The object to read the field from.index
- The index of the field.protocolVersion
- The protocol version to use.null
if that field should be ignored.protected org.joda.time.DateTime deserializeAndSetField(ByteBuffer input, org.joda.time.DateTime target, int index, ProtocolVersion protocolVersion)
TypeCodec.AbstractTupleCodec
TypeCodec.AbstractTupleCodec.deserialize(ByteBuffer, ProtocolVersion)
).deserializeAndSetField
in class TypeCodec.AbstractTupleCodec<org.joda.time.DateTime>
input
- The serialized form of the field.target
- The object to set the field on.index
- The index of the field.protocolVersion
- The protocol version to use.target
, but if you're dealing with immutable types you'll need to return a different
instance.protected String formatField(org.joda.time.DateTime value, int index)
TypeCodec.AbstractTupleCodec
TypeCodec.AbstractTupleCodec.format(Object)
).formatField
in class TypeCodec.AbstractTupleCodec<org.joda.time.DateTime>
value
- The object to read the field from.index
- The index of the field.protected org.joda.time.DateTime parseAndSetField(String input, org.joda.time.DateTime target, int index)
TypeCodec.AbstractTupleCodec
TypeCodec.AbstractTupleCodec.parse(String)
).parseAndSetField
in class TypeCodec.AbstractTupleCodec<org.joda.time.DateTime>
input
- The String to parse the field from.target
- The value to write to.index
- The index of the field.target
, but if you're dealing with immutable types you'll need to return a different
instance.Copyright © 2012–2020. All rights reserved.