来自SimpleDateFormat的Java,GregorianCalendar,避免转换为本地时区

时间:2014-11-14 13:50:28

标签: java date timezone gregorian-calendar

我必须解析类似字符串dep的内容,但我无法事先知道时区和偏移量。我想解析字符串,从GregoriaCalendar实例化对象检索时区和偏移量,或者避免转换到本地时区,如下所示:

public class Prova {
public static void main(String[] args) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy z");     
    String dep = "13/11/2014 GMT+08:00";
    GregorianCalendar gc1 = new GregorianCalendar();

    try {

        gc1.setTime(dateFormat.parse(dep));
        System.out.println( dateFormat.format(gc1.getTime()) + " time zone: " + gc1.getTimeZone().getID());

    } catch (ParseException | DatatypeConfigurationException e) {
        e.printStackTrace();
    }

}

}

输出结果为:

12/11/2014 CET time zone: Europe/Rome

我在Date,TimeZone,SimpleTimeZone类文档中搜索过但我没有找到任何有用的东西。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

这是我想出的。请注意更改(注释行)。我还将日期本身更改为与我的时区的正偏移,因此我可以重现原始错误。

除了分别处理时间和时区外,我基本上不会看到这样做。您必须设置每个或您创建的Date对象将转换为毫秒,并且它没有时区。

class Prova
{

   public static void main( String[] args )
   {

//      SimpleDateFormat dateFormat = new SimpleDateFormat( 
//              "dd/MM/yyyy z" );
      SimpleDateFormat dateFormat = new SimpleDateFormat( 
              "dd/MM/yyyy" );
      String dep = "13/11/2014 GMT+12:00";
      GregorianCalendar gc1 = new GregorianCalendar();

      try {

         String[] dateZone = dep.split( " " );
         Date date = dateFormat.parse( dateZone[0] );
         TimeZone tz = TimeZone.getTimeZone( dateZone[1] );
         gc1.setTimeZone(tz);
         gc1.setTime(date);

//         gc1.setTime( dateFormat.parse( dep ) );
         System.out.println( dateFormat.format( gc1.getTime() ) +
                 " time zone: " + gc1.getTimeZone().getID() );

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

   }
}