我必须解析类似字符串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类文档中搜索过但我没有找到任何有用的东西。 提前谢谢!
答案 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();
}
}
}