Java 解析没有时区转换的日期

Java 解析没有时区转换的日期,java,datetime,groovy,gremlin,Java,Datetime,Groovy,Gremlin,我正在使用groovy(确切地说,是gremlin遍历图形数据库)。不幸的是,因为我使用的是gremlin,所以无法导入新类 我希望将一些日期值转换为Unix时间戳。它们以UTC格式存储,格式为:2012-11-13 14:00:00:000 我正在使用以下代码段(在groovy中)对其进行解析: 问题是它会进行时区转换,这会导致: Tue Nov 13 14:00:00 EST 2012 然后,如果我使用time()将其转换为时间戳,则转换为UTC,然后生成时间戳 如何使new Date()

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

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

我正在使用以下代码段(在groovy中)对其进行解析:

问题是它会进行时区转换,这会导致:

Tue Nov 13 14:00:00 EST 2012
然后,如果我使用
time()
将其转换为时间戳,则转换为UTC,然后生成时间戳


如何使
new Date()
在第一次解析日期时不进行任何时区转换(并假定日期为UTC)?

JDK 1.1不推荐使用日期类解析(字符串str),请尝试支持时区和区域设置的SimpleDataFormat类

在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");


请注意,Date.parse()已被弃用(因此我不建议使用)。

好吧,
new Date().parse(“yyyy-M-d H:M:s:s”+“Z”,“2012-11-13 14:00:00:000”+“0000”)
让我想起了…@vladr:groovy控制台向我抛出了一个错误,并说它是不可解析的:(
java.text.ParseException:unable-Date:“2012-11-13 14:00:00:000 0000”
@F21@vladr:如果您将其更改为
def newdate=new Date(),该解决方案对我有效。解析(“yyyy-M-d H:M:s:s Z”,“2012-11-13 14:00:00:000”+“UTC”)
#parse
是静态的,所以除非Gremlin强迫你这么做,否则你不需要创建一个
日期的实例来调用它。@JustinPiper Gremlins让我这么做的,我发誓!:)(就是复制粘贴)|@F21,对不起,时区应该是
'+0000'
,而不是
'0000'
。@jahroy,我想我给出的示例附加了时区,不是吗?:)@vladr-我的道歉…我忽略了它(有时在评论中很难阅读代码)。您考虑的是Java方法。Groovy提供了一种替代方法,允许您指定格式。文档说明,为了解析
Z
(大写)格式,必须指定RFC 822时区(+XXXX或-XXXX)。根据相同的文档,
UTC
理论上只能用
z
(小写)格式进行解析。如果在现实中
parse
可以互换地处理这两种格式,我不会感到惊讶,但我只想确认(我自己没有访问Groovy的权限):上面的第一个示例有效吗?是的。这两个示例对我都有效(在我发布它们之前)。尽管如此,我也没有访问Groovy的权限(我从未使用过)。这就是为什么我说:“在Java中有两种方法可以做到这一点”。说实话,我真的不知道Java和Groovy之间的关系。也许这个答案是不相关的。。。。
/*
 *  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);