解析时区的字符串描述

Parse string description of timezone

我在 string format.

中获得了关于 timezone 的信息
 (UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius

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

根据你想如何使用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]]