Java后台list转json的时候,Date类型字段转换的问题

问题:

Java后台使用list转json,遇到实体类有Date类型的字段,获取到的日期格式不是我们想要的。

如:

"businessDate": {"date": 9,"day": 6,"hours": 10,"minutes": 36,"month": 4,"seconds": 51,"time": 1588991811000,"timezoneOffset": -480,"year": 120}

希望得到的结果:

"businessDate": "2020-05-09 10:36:51"

解决方法:添加自定义的日期格式转化类

public class JsonDateValueProcessor implements JsonValueProcessor {

    private String format = "yyyy-MM-dd HH:mm:ss";

    public JsonDateValueProcessor(String format) {
        this.format = format;
    }

    public JsonDateValueProcessor() {

    }

    @Override
    public Object processArrayValue(Object value, JsonConfig config) {
        return process(value);
    }

    @Override
    public Object processObjectValue(String key, Object value, JsonConfig config) {
        return process(value);
    }

    private Object process(Object value){

        if(value instanceof Date){
            SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.UK);
            return sdf.format(value);
        }
        return value == null ? "" : value.toString();
    }
}

使用方法:

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());
JSONArray jsonArray = JSONArray.fromObject(list,jsonConfig);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Elasticsearch 中,可以使用 Date Histogram Aggregation 来以 Date 类型字段的分钟为单位进行聚合统计。具体实现如下: 1. 创建一个 Date Histogram Aggregation: ``` DateHistogramAggregationBuilder aggregation = AggregationBuilders.dateHistogram("agg") .field("date_field") .dateHistogramInterval(DateHistogramInterval.MINUTE); ``` 2. 执行查询并获取聚合结果: ``` SearchResponse response = client.prepareSearch("index_name") .addAggregation(aggregation) .execute() .actionGet(); Histogram histogram = response.getAggregations().get("agg"); List<? extends Histogram.Bucket> buckets = histogram.getBuckets(); for (Histogram.Bucket bucket : buckets) { DateTime date = (DateTime) bucket.getKey(); long count = bucket.getDocCount(); System.out.println(date + " => " + count); } ``` 其中,`date_field` 是 Date 类型字段的名称,`DateHistogramInterval.MINUTE` 表示以分钟为单位进行聚合统计。在聚合结果中,每个 Bucket 代表一个间段,其中 `getKey()` 方法返回间段的开始间,`getDocCount()` 方法返回该间段内的文档数量。 注意,在使用 Date Histogram Aggregation 进行聚合统计,需要将字段映射为 Date 类型。可以使用如下代码进行字段映射: ``` XContentBuilder mapping = jsonBuilder() .startObject() .startObject("properties") .startObject("date_field") .field("type", "date") .endObject() .endObject() .endObject(); client.admin().indices().prepareCreate("index_name") .addMapping("type_name", mapping) .execute() .actionGet(); ``` 其中,`date_field` 是字段的名称,`type_name` 是文档类型的名称,`jsonBuilder()` 是 Elasticsearch 的内置 JSON 构造器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值