# Convert Timestamp to milliseconds in ingest pipeline

**URL:** <https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602>\
**Category:** Kibana\
**Tags:** ingest-pipeline\
**Created:** [January 17, 2022, 3:01pm UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602 "2022-01-17T15:01:27Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)\
**Post date:** [January 17, 2022, 3:01pm UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/1 "2022-01-17T15:01:27Z")

</div>

Hi,

I am trying to find a way to get millis from string date time field using ingest pipeline and getting following error.

please help me to correct the script.

POST /\_ingest/pipeline/\_simulate  
{  
"pipeline": {  
"description": "\_description",  
"processors": [  
{  
"script": {  
"source": "ctx.time\_millis = ZonedDateTime.parse(ctx.TimeStamp.getMillis)"  
}  
}  
]  
},  
"docs": [  
{  
"\_index": "index",  
"\_id": "id",  
"\_source": {  
"TimeStamp": "2022-01-13T10:42:10.982"  
}  
}  
]  
}

---

<div class="post-metadata">

**Author:** ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)\
**Post date:** [January 17, 2022, 3:02pm UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/2 "2022-01-17T15:02:57Z")

</div>

Error :  
"type" : "script\_exception",  
"reason" : "runtime error",  
"script\_stack" : [  
"ctx.time\_millis = ZonedDateTime.parse(ctx.TimeStamp.getMillis)",  
" ^---- HERE"  
],  
"script" : "ctx.time\_millis = ZonedDateTime.parse(ctx.TimeStamp.getMillis)",  
"lang" : "painless",  
"position" : {  
"offset" : 51,  
"start" : 0,  
"end" : 62  
},  
"caused\_by" : {  
"type" : "illegal\_argument\_exception",  
"reason" : "dynamic getter [java.lang.String, getMillis] not found"  
}  
}  
}

---

<div class="post-metadata">

**Author:** ![majagrubic](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/majagrubic/32/74459_2.png) [@majagrubic](https://discuss.elastic.co/u/majagrubic)\
**Post date:** [January 18, 2022, 8:37am UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/3 "2022-01-18T08:37:50Z")

</div>

I am not sure, but could it maybe be that you need `ZonedDateTime.parse(ctx.TimeStamp.getMillis())`? `getMilis()` as a method, opposed to a property?

---

<div class="post-metadata">

**Author:** ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)\
**Post date:** [January 21, 2022, 1:56pm UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/4 "2022-01-21T13:56:26Z")

</div>

Hello Maja, thank you for the response..

We actually looking to get this action painless script using ingest pipeline.

Painless script:  
String datetime = '2022-01-13T10:42:10.982Z';

ZonedDateTime zdt = ZonedDateTime.parse(datetime);

long milliSinceEpoch = zdt.toInstant().toEpochMilli();

return milliSinceEpoch

I tried following scripts

1. "script": {  
"source": """ String datetime = ctx['TimeStamp'];  
ZonedDateTime zdt = ZonedDateTime.parse(ctx['TimeStamp']);  
long milliSinceEpoch = zdt.toInstant().toEpochMilli();  
ctx['test'] = milliSinceEpoch;  
"""
2. "script": {  
"source": """ String datetime = ctx['TimeStamp'];  
ZonedDateTime zdt = ZonedDateTime.parse(ctx['TimeStamp']);  
long milliSinceEpoch = zdt.toEpochMilli();  
ctx['test'] = milliSinceEpoch;  
"""

but I get same error..

---

<div class="post-metadata">

**Author:** ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)\
**Post date:** [January 21, 2022, 2:03pm UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/5 "2022-01-21T14:03:41Z")

</div>

I also tried with this script which leads different error. Please refer screenshot.

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/7/b/7b21a415706c3f77954726fe9404a010f3ae4668.png)

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [January 21, 2022, 9:44pm UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/6 "2022-01-21T21:44:08Z")

</div>

it looks there is no 'datetime' in ctx. ctx[datetime] should be datetime, isn't it?

---

<div class="post-metadata">

**Author:** ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)\
**Post date:** [January 24, 2022, 9:46am UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/7 "2022-01-24T09:46:20Z")

</div>

I tried even with TimeStamp that exist in ctx. same error.  
Without ctx on timestamp

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/6/b/6b5240911ad7cb01ed23019368df0e79307bc6a5.png)  
with ctx on timestamp  
 ![image](https://us1.discourse-cdn.com/elastic/original/3X/6/8/681f7bce841f697bd936cc93d37429fd13acf176.png)

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [January 24, 2022, 12:22pm UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/8 "2022-01-24T12:22:36Z")

</div>

From next time please share your code using \</\> button to be preformatted.

Maybe you have to add Zone information to timestamp.  
[Using DateTime in Painless](https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-datetime.html) is quite important to deal with datetime in painless.

```auto
POST /_ingest/pipeline/_simulate
{
  "pipeline": {
    "description": "_description",
    "processors": [
      {"script": {
        "source": """DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
        LocalDateTime ldt = LocalDateTime.parse(ctx['TimeStamp'], dtf);
        ZonedDateTime zdt = ldt.atZone(ZoneId.of('Z'));
        ctx['test']=zdt.toInstant().toEpochMilli();"""
      }}
    ]
  },
  "docs":[
    {
      "_index": "index",
      "_id": "id",
      "_source": {
        "TimeStamp": "2022-01-13T10:42:10.982"
      }
    }]
}

```

if you can change timestamp to including timezon like ` "TimeStamp": "2022-01-13T10:42:10.982Z"`, it is more simple.

```auto
POST /_ingest/pipeline/_simulate
{
  "pipeline": {
    "description": "_description",
    "processors": [
      {"script": {
        "source": """
        ZonedDateTime zdt = ZonedDateTime.parse(ctx['TimeStamp']);
        ctx['test']=zdt.toInstant().toEpochMilli();"""
      }}
    ]
  },
  "docs":[
    {
      "_index": "index",
      "_id": "id",
      "_source": {
        "TimeStamp": "2022-01-13T10:42:10.982Z"
      }
    }]
}

```

---

<div class="post-metadata">

**Author:** ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)\
**Post date:** [January 25, 2022, 6:50am UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/9 "2022-01-25T06:50:40Z")

</div>

> [@Tomo\_M](#):
>
> ```auto
> POST /_ingest/pipeline/_simulate
> {
> "pipeline": {
> "description": "_description",
> "processors": [
> {"script": {
> "source": """DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
> LocalDateTime ldt = LocalDateTime.parse(ctx['TimeStamp'], dtf);
> ZonedDateTime zdt = ldt.atZone(ZoneId.of('Z'));
> ctx['test']=zdt.toInstant().toEpochMilli();"""
> }}
> ]
> },
> "docs":[
> {
> "_index": "index",
> "_id": "id",
> "_source": {
> "TimeStamp": "2022-01-13T10:42:10.982"
> }
> }]
> }
> 
> ```

It worked like magic..  
Thank you so much **Tomo** for your time and response.

---

<div class="post-metadata">

**Author:** ![Rakesh\_Rayabarapu](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rakesh_rayabarapu/32/79132_2.png) [@Rakesh\_Rayabarapu](https://discuss.elastic.co/u/Rakesh_Rayabarapu)\
**Post date:** [January 25, 2022, 11:47am UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/10 "2022-01-25T11:47:26Z")

</div>

I have extended the solution when "TimeStamp": "2022-01-25T07:30:11.463+0000"

```auto
POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
        "script": {
          "description": "Get EpochMilli from SampleStartTime",
          "lang": "painless",
          "source": """
            String[] TempSplit = ctx['TimeStamp'].splitOnToken('+');
            String Temp= TempSplit[0].trim();
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
            LocalDateTime ldt = LocalDateTime.parse(Temp, dtf);
            ZonedDateTime zdt = ldt.atZone(ZoneId.of('Z'));
            ctx['SampleStartTime_millis']=zdt.toInstant().toEpochMilli();
            """,
            "ignore_failure": true
        }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "TimeStamp": "2022-01-25T07:30:11.463+0000"
      }
    }
  ]
}

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [February 22, 2022, 11:47am UTC](https://discuss.elastic.co/t/convert-timestamp-to-milliseconds-in-ingest-pipeline/294602/11 "2022-02-22T11:47:27Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
