tree 2b20be74fed7cd50578533f95a5953f164f71f78
parent c35a21e5984fcdd25d72d4919dfb181c9234ab60
author Kent Yao <yao@apache.org> 1714414419 -0700
committer Dongjoon Hyun <dhyun@apple.com> 1714414419 -0700

[SPARK-48042][SQL] Use a timestamp formatter with timezone at class level instead of making copies at method level

### What changes were proposed in this pull request?

This PR creates a timestamp formatter with the timezone directly for formatting. Previously, we called `withZone` for every value in the `format` function. Because the original `zoneId` in the formatter is null and never equals the one we pass in, it creates new copies of the formatter over and over.

```java
...
     *
     * param zone  the new override zone, null if no override
     * return a formatter based on this formatter with the requested override zone, not null
     */
    public DateTimeFormatter withZone(ZoneId zone) {
        if (Objects.equals(this.zone, zone)) {
            return this;
        }
        return new DateTimeFormatter(printerParser, locale, decimalStyle, resolverStyle, resolverFields, chrono, zone);
    }
```

### Why are the changes needed?

improvement
### Does this PR introduce _any_ user-facing change?

no

### How was this patch tested?

- Existing tests
- I also ran the DateTimeBenchmark result locally, there's no performance gain at least for these cases.

### Was this patch authored or co-authored using generative AI tooling?
no

Closes #46282 from yaooqinn/SPARK-48042.

Authored-by: Kent Yao <yao@apache.org>
Signed-off-by: Dongjoon Hyun <dhyun@apple.com>
