2016-05-31 77 views
-3

我想将给定的UTC字符串日期转换为UTC日期对象。 我得到这种格式的UTC字符串dd-MMM-yyyy hh:mm:ss.sssss aa 我想将此String对象转换为Date对象。 我试图通过将时区设置为“UTC”,它不工作SimpleDateFormat。想要将给定的UTC字符串对象转换为UTC日期对象

对我来说唯一的一件事是,将默认的JVM时区强制设置为UTC,而我不希望这会改变我在许多进程中使用的JVM时间。

请建议。

+2

'Date'没有时区。 –

+0

总是发布您的代码,预期或期望的结果以及实际结果很有帮助。 – nateyolles

+0

请在发布前彻底搜索Stack Overflow。 –

回答

0

A java.util.Date对象不包含时区信息,所以不存在“UTC Date对象”之类的东西。 A java.util.Date只不过是自01-01-1970,00:00:00格林尼治标准时间以来的几毫秒内的一个包装,因此您可以看到一个Date物体指向“绝对”时间点,无论时区。

如果你想打印在一定的时区一个Date对象(例如UTC),然后设置使用Date格式化SimpleDateFormat对象所需的时区:

Date now = new Date(); 

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
df.setTimeZone(TimeZone.getTimeZone("UTC")); 

// Prints the date in the UTC timezone 
System.out.println(df.format(now)); 

如果您正在使用在Java 8中,使用新的java.time API会更好,因为API的日期和时间比旧的java.util.Datejava.util.Calendar要好得多。例如,使用ZonedDateTime如果希望知道UTC日期和时间:

DateTimeFormatter df = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss.SSSSS a") 
     .withZone(ZoneOffset.UTC); 

ZonedDateTime dateTime = ZonedDateTime.parse("31-May-2016 06:54:16.78000 AM", df); 

如果您使用的是Java 7或以上,可以考虑使用Joda Time

+0

Jesper谢谢你的回复..我已经尝试了上面的代码..因为我的输出应该是java.util.Date对象,所以只要我将输出返回给此对象,它就会拾取JVM默认时区并添加到它。我的服务器时间在CEST,所以它给了我相当于CEST的日期。此外,我的Integartion服务器有JDK 1.7,我不能使用java.time,因为它随附更高的服务器版本,所以无法升级到JDK1.8。 –