我正在使用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)?
答案 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类。