将java.util.TimeZone字符串转换为java.util.TimeZone
是否可以转换将java.util.TimeZone字符串转换为java.util.TimeZone,java,datetime,Java,Datetime,是否可以转换java.util.TimeZone字符串 sun.util.calendar.ZoneInfo[id=\"America/Los_Angeles\",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDay
java.util.TimeZone
字符串
sun.util.calendar.ZoneInfo[id=\"America/Los_Angeles\",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]
回到
java.util.TimeZone
对象 有效Java的一部分;项目10:
提供编程信息给所有由
toString,或者客户端可能会尝试解析字符串以检索它
换句话说:如果可行,不要试图解析toString
的输出。如果你是被迫这样做的(但只有在没有其他办法的情况下),那么你可以这样做:
- 您必须使用反射来完成此操作(
是一个抽象类,在TimeZone
输出中,您可以看到此实例不是toString
而是ZoneInfo
)SimpleTimeZone
- 您必须在任何适用的构造函数中解析并调用所需的数据
没有“简单的解决方案”将
表示的时区
反向映射到时区
对象中。(有些API中有一个fromString
方法或类似方法,新的Java Date API不是其中之一,也不应该是)。您可以从该字符串中解析id
,并从中获得一个新的时区
对象。但这似乎是一个XY问题:为什么要得到这样的字符串,为什么不能使用原始对象或其序列化或更容易解析的字符串?我决定使用原始时区对象的“id”值而不是这个字符串。谢谢仅供参考,TimeZone
是一个麻烦的旧日期时间类,它现在是遗留的,被java.time类取代。请参阅类ZoneId
和ZoneOffset
。同意@BasilBourque。如果您从解析或其他方式获得ID字符串,请使用ZoneId.of(idString)
。如果您获得原始的时区
对象,timeZoneObject.toZoneId()
,则更容易。我将坚持使用原始时区对象,而不是此字符串。这似乎增加了不必要的复杂性。非常感谢。