解析日期而不进行时区转换

时间:2012-11-15 02:18:42

标签: java datetime groovy gremlin

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

我有一些我希望转换为Unix时间戳的日期值。它们以UTC格式存储为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)?

3 个答案:

答案 0 :(得分:14)

以下是在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()已弃用(因此我不建议这样做。)

答案 1 :(得分: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();

答案 2 :(得分:-2)

从JDK 1.1中不推荐使用Date类解析(String str),尝试也支持TimeZone和Locale设置的SimpleDateFormat类。