在Java中将时区转换为“EDT”

时间:2013-07-01 11:40:04

标签: java parsing timezone

我需要在“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();
}

1 个答案:

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

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