### Description

I would like to be able to parse unix epoch timestamps that contain a fractional value with nanosecond precision (e.g. `1647479604.334549372`). These currently parse, but only millisecond precision is retained. Given that the date processor supports nanosecond output formats, I think it would be good to retain the nanosecond precision.

```
POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
        "date": {
          "field": "message",
          "formats": [
            "UNIX"
          ],
          "output_format": "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSXXX"
        }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "message": "1647479604.334549372"
      }
    }
  ]
}
```

Output:

```
{
  "docs" : [
    {
      "doc" : {
        "_index" : "_index",
        "_id" : "_id",
        "_source" : {
          "@timestamp" : "2022-03-17T01:13:24.334000000Z", # NOTE: This only contains millisecond precision.
          "message" : "1647479604.334549372"
        },
        "_ingest" : {
          "timestamp" : "2022-04-23T02:15:28.600856847Z"
        }
      }
    }
  ]
}
```

My assumption is that the cast to long truncates the everything after the millis at

https://github.com/elastic/elasticsearch/blob/ce6d2e7f31ab7c7c36cc49eb708549b64f68086a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateFormat.java#L49


modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateFormat.java
/*
 * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
 * or more contributor license agreements. Licensed under the Elastic License