我有一个linux应用程序,它以iOS-XR格式显示时间与时区:技术系统时钟状态本地时间字符串"10:16:12.523 CDT清华2013年3月21日“
我还看到在linux "zdump“输出中使用了"CDT”快捷方式:
-v美国/哈瓦那太阳报2013年美国/哈瓦那太阳报2013年3月10日04:59 2013年世界时=星期六23:59 2013年科技委isdst=0 gmtoff=-18000美国/哈瓦那太阳报2013年3月10日05:00 2013年UTC = Sun 2013年3月01:00 2013年11月3日59:59 2013年11月3日:59:59 2013年11月3日:59:59 2013年11月3日:59:59 2013年CDT isdst=1 gmtoff=-14400美国/哈瓦那Sun 11月3: 00:00:00 :00
但是当我运行"System.out.println(TimeZone.getTimeZone("CDT"));“命令时,我得到了GMT时区.
发布于 2017-04-30 07:51:30
tl;dr
在哪里可以找到将时间字符串转换为“日期”对象的开放源代码?
在java.time类中内置到Java中。
LocalDate.parse( "2017-01-23" )
LocalTime.parse( "14:56:00" )
LocalDateTime.parse( "2017-01-23T07:56:00" )
OffsetDateTime.parse( "2017-01-23T07:56:00-07:00" )
ZonedDateTime.parse( "2017-01-23T07:56:00-07:00[America/Los_Angeles]" )使用java.time
您正在使用麻烦的旧日期时间类,这些类现在是遗留的,被java.time类取代。
ZoneId
java.util.TimeZone类被java.time.ZoneId和java.time.ZoneOffset替换。时区是特定地区与世界协调时相抵消的变化的历史.
在遗留的java.time类中有许多糟糕的设计决策。使用3-4字符的伪时区码是这样一个糟糕的选择。不要使用3-4字母的缩写,如CDT、EST或IST,因为它们不是真正的时区,不标准化,甚至不是唯一的(!)。
相反,您应该以continent/region格式指定一个continent/region,例如America/Montreal、Africa/Casablanca或Pacific/Auckland。
ISO 8601
避免使用设计糟糕的尴尬格式,如"10:16:12.523 CDT清华2013年3月21日“,这些格式很难被人类阅读,很难用机器解析,没有必要地依赖英语,并且使用歧义(比无用更糟糕!)假时区。相反,可以使用标准的ISO 8601格式。默认情况下,java.time类使用这些格式。ZonedDateTime类通过在方括号中附加非洲大陆/区域时区名称来扩展标准格式。
示例:
对于ISO 8601以外的格式,请使用DateTimeFormatter类。已经覆盖了数百次,所以搜索堆栈溢出以获得更多的信息和示例。
关于java.time
java.time框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.Date、Calendar和SimpleDateFormat。
尤达-时间项目现在在维护模式中,建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310。
在哪里获得java.time类?
三次-额外项目使用其他类扩展java.time。这个项目是将来可能加入java.time的试验场。您可以在这里找到一些有用的类,如Interval、YearWeek、YearQuarter和更多。
发布于 2013-03-21 17:04:00
1)参见java.util.DateFormatSymbols.getZoneStrings,它返回一个
•zoneStrings[i][0] - time zone ID
•zoneStrings[i][1] - long name of zone in standard time
•zoneStrings[i][2] - short name of zone in standard time
•zoneStrings[i][3] - long name of zone in daylight saving time我们可以在TimeZone.getTimeZone()中使用“时区ID”,其余的作为SimpleDateFormat 'z‘通用时区
2) CDT对于SimpleDateFormat来说是可以的,尝试
new SimpleDateFormat("z").parse("CDT");它起作用了
发布于 2013-03-21 17:10:16
我会试着回答你问题的第二部分。试试Joda-time
http://joda-time.sourceforge.net/index.html
如果有帮助,一定要告诉我们。
https://stackoverflow.com/questions/15552564
复制相似问题