15

我正在使用 groovy(确切地说是遍历图形数据库的 gremlin)。不幸的是,因为我使用的是 gremlin,所以我无法导入新类。

我有一些日期值希望转换为 Unix 时间戳。它们以 UTC 格式存储为:2012-11-13 14:00:00:000

我正在使用这个片段(在 groovy 中)解析它:

def newdate = new Date().parse("yyyy-M-d H:m:s:S", '2012-11-13 14:00:00:000')

问题是它进行了时区转换,结果是:

Tue Nov 13 14:00:00 EST 2012

然后,如果我使用 将其转换为时间戳time(),则将其转换为 UTC,然后生成时间戳。

如何在new Date()首次解析日期时不进行任何时区转换(并且假设日期为 UTC)?

4

3 回答 3

19

以下是在 Java 中执行此操作的两种方法:

/*
 *  Add the TimeZone info to the end of the date:
 */

String dateString = "2012-11-13 14:00:00:000";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d H:m:s:S Z");
Date theDate = sdf.parse(dateString + " UTC");

/*
 *  Use SimpleDateFormat.setTimeZone()
 */

String dateString = "2012-11-13 14:00:00:000";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d H:m:s:S");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date theDate = sdf.parse(dateString);

请注意Date.parse()已被弃用(所以我不推荐它)。

于 2012-11-15T02:27:08.417 回答
0

我使用日历来避免时区转换。虽然我没有使用 new Date(),但结果是一样的。

String dateString = "2012-11-13 14:00:00:000";
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d H:m:s:S");
calendar.setTime(sdf.parse(dateString));
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = calendar.getTime();
于 2021-06-30T14:54:27.497 回答
-1

Date class parse(String str) 从 JDK 1.1 中被弃用,尝试支持 TimeZone 和 Locale 设置的 SimpleDateFormat 类。

于 2012-11-15T02:22:33.403 回答