0

我需要在“EDT”时区获取当前时间。我得到了当前时间并将其格式化为“EDT”,我得到了我想要的时间。但是,当我尝试将其解析为“EDT”时区中的日期时,在解析为日期后,我仍然以“IST”格式获取时间。我不知道我做错了什么。

Date date = new Date(); 

String format = "MM/dd/yyyy hh:mm:ss Z";

DateFormat formatter = new SimpleDateFormat(format);

formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));

String dateString = formatter.format(date);
System.out.println(dateString);

try {       System.out.println(formatter.parse(dateString));
}     

catch (ParseException e) {
    e.printStackTrace();
}
4

1 回答 1

0

java.util.Date 和 .Calendar 类是出了名的麻烦。避开他们。而是使用 Joda-Time 或 Java 8 中的 java.time 包(受 Joda-Time 启发)。

与 java.util.Date 不同,Joda-Time 中的 DateTime 知道自己分配的时区。如果您未能指定时区,则会分配 JVM 的默认时区。

您可以根据需要与 java.util.Date 对象相互转换,以便与其他类一起使用。

java.util.Date date = new Date();

DateTimeZone timeZone = DateTimeZone.forID( "America/New_York" );
DateTime dateTimeNewYork = new DateTime( date, timeZone );
DateTime dateTimeIndia = dateTimeNewYork.withZone( DateTimeZone.forID( "Asia/Kolkata" ) );
DateTime dateTimeUtc = dateTimeNewYork.withZone( DateTimeZone.UTC );

调用toString这些 DateTime 对象上的方法以查看它们自己的时区,该时区用于使用合理的 ISO 8601 标准格式生成字符串。您也可以在 Joda-Time 上使用其他格式。

于 2014-04-19T15:44:12.440 回答