如何从 Mon Sep 02 17:00:00 PDT 2019 转换为 groovy 中的 09022019?

How to convert from Mon Sep 02 17:00:00 PDT 2019 to 09022019 in groovy?

我正在从 UI 获取日期格式 "Mon Sep 02 17:00:00 PDT 2019" 进行处理。但我想转换为 09022019。下面的代码我试过但转换为一天前。

sampleDate = Mon Sep 02 17:00:00 PDT 2019 
sdf = new SimpleDateFormat("MMddyyyy")
sdf.format(sampleDate)

我收到的是 09012019,但预计日期是 09022019。

请帮忙。

您需要为 SimpleDateFormat 添加 setTimeZone

默认情况下,如果指定 none,SimpleDateFormat 使用系统的默认时区。只需将代码的第二行更改为 sdf = new SimpleDateFormat("MMddyyyy z") 即可对其进行检查。也许这就是为什么你得到 09012019.

还有一件事。 TimeZone.getTimeZone("PDT") 不要 return PDT 的时区对象。我猜是因为 PDT 不是时区而是伪时区。然后我们将使用类似 TimeZone.getTimeZone("America/Los_Angeles").

的东西
sdf = new SimpleDateFormat("MMddyyyy")
sdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))
sdf.format(sampleDate)

将 return 09022019 无论系统时区如何。

假设您使用的是 Java 8+ 和 Groovy 2.5+,您可以使用 Java 8 Date/Time API:

import java.time.*
new Date("Mon Sep 02 17:00:00 PDT 2019").toZonedDateTime().format('MMddyyy')