Cassandra 正在字段中存储'z'(在我的情况下是错误的日期格式)



我的服务获取一个 JSON 正文并将其保存到数据库中 我的 JSON 正文看起来像: { "id": "1059", "名字": "最大", "姓氏": "山姆", "电子邮件地址": "abc@gmail.com", "加入日期": "2018-07-02T09:55:24.600", "结束日期":"2018-07-02T04:55:24.677" }

在我的情况下,日期格式是"yyyy-MM-dd'T'HH:mm:ss。SSS",并且不应在日期末尾允许"z"。但是当我将其存储到卡桑德拉字段中时(时间戳( 具有值"2018-07-02 09:55:24.600Z">

我将 JSON 日期字段作为 pojo 中的字符串并解析为日期然后验证它们,我的验证看起来像

public class DateValidator  {
@Override
public boolean isValid(String field) {
if (field == null) {
return ignoreNull ? true : false;
}
boolean isValid = true;
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
LocalDateTime.parse(field, formatter);
} catch (Exception exp) {
isValid = false;
}
return isValid;
}

即使您没有指定时区,当时间戳存储到 Cassandra 中时,也会添加时区。

如果未指定时区,则使用处理写入请求的 Cassandra 协调器节点的时区。

建议指定时区,而不是依赖于 Cassandra 节点上指定的时区。

如果您需要在没有时区的情况下在 cqlsh 中显示时间戳,您可以更改 cqlshrc 文件(cqlsh 的默认格式是 yyyy-mm-dd HH:mm:ssZ(

[ui]
datetimeformat = %Y-%m-%d %H:%M

在java中,您可以轻松删除时区,或者如果时区有问题,则可以将时间戳存储为字符串。

与此相关的一些东西:1,2,3。

相关内容