解析时区的字符串描述

时间:2015-11-06 09:16:50

标签: java jodatime

我在timezone

中获得有关string format.的信息
 (UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius

是否有可能将其解析为Java with standard library或外部的 TimeZone对象

1 个答案:

答案 0 :(得分:1)

根据您之后使用TimeZone的方式,您可以创建自定义

String input = "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius";
// assuming the format is always fixed at the beginning
String timeZoneOffset = input.substring(4,10);
TimeZone timeZone = TimeZone.getTimeZone("GMT" + timeZoneOffset);
System.out.println("timeZone = " + timeZone);

输出(换行)

timeZone = sun.util.calendar.ZoneInfo[id="GMT+02:00",offset=7200000,dstSavings=0,\
useDaylight=false,transitions=0,lastRule=null]

您可能会遇到与白天节省相关的麻烦。

或者您创建一个查找映射,其中包含每个偏移的条目(剥离代码剪切)

String input = "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius";
// assuming the format is always fixed at the beginning
String timeZoneOffset = input.substring(4,10);

// needs to be initialized somewhere
Map<String, TimeZone> timeZones = new HashMap<>();
// you need to add all offsets
timeZones.put("+02:00", TimeZone.getTimeZone("EET"));

System.out.println("timeZone lookup = " + timeZones.get(timeZoneOffset));

输出(换行)

timeZone lookup = sun.util.calendar.ZoneInfo[id="EET",offset=7200000,dstSavings=3600000,\
useDaylight=true,transitions=123,lastRule=java.util.SimpleTimeZone[id=EET,offset=7200000,\
dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,\
startDay=-,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,\
endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]