Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java.util.TimeZone字符串转换为java.util.TimeZone_Java_Datetime - Fatal编程技术网

将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()
,则更容易。我将坚持使用原始时区对象,而不是此字符串。这似乎增加了不必要的复杂性。非常感谢。