elasticsearch,format,aggregation,C#,Datetime,elasticsearch,Format,Aggregation" /> elasticsearch,format,aggregation,C#,Datetime,elasticsearch,Format,Aggregation" />

C# 正在分析或格式化最小/最大日期值-用于elaticsearch聚合

C# 正在分析或格式化最小/最大日期值-用于elaticsearch聚合,c#,datetime,elasticsearch,format,aggregation,C#,Datetime,elasticsearch,Format,Aggregation,我在这里结束了一个奇怪的场景。我要使用Elasticsearch和c#执行此聚合: 到目前为止,它将聚合密钥返回给我,如下所示: Response: { "took" : 29, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "failed" : 0 }, "hits" : { "total" : 30218, "max_score" : 0.

我在这里结束了一个奇怪的场景。我要使用Elasticsearch和c#执行此聚合:

到目前为止,它将聚合密钥返回给我,如下所示:

    Response: {
  "took" : 29,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "hits" : {
    "total" : 30218,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "Min_sys_created_on" : {
      "value" : 1.402508357E12,
      "value_as_string" : "1402508357000"
    },
    "Min_sys_updated_on" : {
      "value" : 1.453305924E12,
      "value_as_string" : "1453305924000"
    }
这里的问题是回报本身。当我尝试转换值(“145330592400”)时,假设它是使用下面的标准转换的Unix格式,由于“超出范围值”异常而失败:

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return Convert.ToInt64((date - epoch).TotalSeconds);
我相信我有两种选择:

A) 找到将此值(“145330592400”)转换为可理解的日期格式的方法。Unix转换没有像我说的那样工作

B) 使用C#,在弹性查询中添加“format”属性。它看起来是这样的:

  "aggs": {
    "test": {
      "min": {
        "field": "sys_created_on", 
        "format" : "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
      }
    }
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
return epoch.AddMilliseconds(date).ToLocalTime();
不幸的是,我不知道如何使用nestc#添加这个“format”属性

对A或B有什么想法


非常感谢

1453305924000是自纪元以来的毫秒数,因此无需从纪元中减去它。因此,您可以选择选项A,只需这样做:

  "aggs": {
    "test": {
      "min": {
        "field": "sys_created_on", 
        "format" : "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
      }
    }
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
return epoch.AddMilliseconds(date).ToLocalTime();