# Runtime field issue creating a date/time field

**URL:** <https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551>\
**Category:** Kibana\
**Tags:** painless, lens\
**Created:** [October 26, 2022, 3:57pm UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551 "2022-10-26T15:57:32Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Garry](https://avatars.discourse-cdn.com/v4/letter/g/bb73d2/32.png) [@Garry](https://discuss.elastic.co/u/Garry)\
**Post date:** [October 26, 2022, 3:57pm UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551/1 "2022-10-26T15:57:32Z")

</div>

I am creating a new date field through Lens.  
The original field is coming through as text in the format '2022-10-25T16:04:35.320'  
In the Set Value field i have...

if (doc.containsKey('sql.metrics.string.starttime')) {  
def source = doc['sql.metrics.string.starttime'].value;  
if (source != "") {  
emit(source);

```
}

```

}

However, I am getting the following error...

cannot implicitly cast def [java.lang.String] to long

Any ideas?

---

<div class="post-metadata">

**Author:** ![Marco\_Liberati](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/marco_liberati/32/82953_2.png) [@Marco\_Liberati](https://discuss.elastic.co/u/Marco_Liberati)\
**Post date:** [October 27, 2022, 8:44am UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551/2 "2022-10-27T08:44:26Z")

</div>

The error message is trying to say that the returned value is a `String` but it was expecting a `long` value (Date in milliseconds).

Changing the `emit` part to transform the String should make it work:

```auto
if (doc.containsKey('sql.metrics.string.starttime')) {
  def source = doc['sql.metrics.string.starttime'].value;
  if (source != "") {
    emit(
      ZonedDateTime.parse(source)
      .toInstant()
      .toEpochMilli()
    );
  }
}

```

Here you can find more references about DateTime manipulations: [Using Datetime in Painless | Painless Scripting Language [master] | Elastic](https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-datetime.html)

---

<div class="post-metadata">

**Author:** ![Garry](https://avatars.discourse-cdn.com/v4/letter/g/bb73d2/32.png) [@Garry](https://discuss.elastic.co/u/Garry)\
**Post date:** [October 27, 2022, 11:38am UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551/3 "2022-10-27T11:38:17Z")

</div>

Hi Marco, thanks for the reply.

I am now getting the following error using your code...

date\_time\_parse\_exception: Text '2022-06-13T15:20:29.707' could not be parsed at index 23

---

<div class="post-metadata">

**Author:** ![Marco\_Liberati](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/marco_liberati/32/82953_2.png) [@Marco\_Liberati](https://discuss.elastic.co/u/Marco_Liberati)\
**Post date:** [October 27, 2022, 1:30pm UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551/4 "2022-10-27T13:30:13Z")

</div>

The date string is missing the "Time Zone designator" (part of ISO8601).  
If the date strings are UTC you can append a "Z" at the end of it:

```auto
if (doc.containsKey('sql.metrics.string.starttime')) {
  def source = doc['sql.metrics.string.starttime'].value;
  if (source != "") {
    emit(
      ZonedDateTime.parse(source + "Z")
      .toInstant()
      .toEpochMilli()
    );
  }
}

```

---

<div class="post-metadata">

**Author:** ![Garry](https://avatars.discourse-cdn.com/v4/letter/g/bb73d2/32.png) [@Garry](https://discuss.elastic.co/u/Garry)\
**Post date:** [October 28, 2022, 3:04pm UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551/5 "2022-10-28T15:04:53Z")

</div>

Hi Marco,  
that works....until i am in Discovery which then throws up an error...

"type": "illegal\_state\_exception",  
"reason": "A document doesn't have a value for a field! Use doc[].size()==0 to check if a document is missing a field!"

Any ideas?

---

<div class="post-metadata">

**Author:** ![Marco\_Liberati](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/marco_liberati/32/82953_2.png) [@Marco\_Liberati](https://discuss.elastic.co/u/Marco_Liberati)\
**Post date:** [November 2, 2022, 11:24am UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551/6 "2022-11-02T11:24:12Z")

</div>

That is an additional condition to check before `emit`ting in case there are no values.

```auto
if (doc.containsKey('sql.metrics.string.starttime') && doc['sql.metrics.string.starttime'].size() != 0) {
  def source = doc['sql.metrics.string.starttime'].value;
  if (source != "") {
    emit(
      ZonedDateTime.parse(source + "Z")
      .toInstant()
      .toEpochMilli()
    );
  }
}

```

---

<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:** [November 29, 2022, 9:26am UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551/7 "2022-11-29T09:26:54Z")

</div>



---

<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:** [December 27, 2022, 9:27am UTC](https://discuss.elastic.co/t/runtime-field-issue-creating-a-date-time-field/317551/8 "2022-12-27T09:27:54Z")

</div>

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