怎么把groovy中的Mon Sep 02 17:00:00 PDT 2019转换成09022019?

时间:2019-09-03 04:17:30

标签: date groovy date-formatting

我正在从用户界面获取日期格式为“ 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。

请帮助。

2 个答案:

答案 0 :(得分:2)

假设您使用的是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')

答案 1 :(得分:1)

您需要为setTimeZone添加SimpleDateFormat

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

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

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

无论系统时区如何,都将返回09022019。