javadate设置时区_如何设置java.util.Date的时区?
慕村9548890
…解析…从字符串…时区未指定…我想设置⼀个特定的时区LocalDateTime.parse( "2018-01-23T01:23:45.123456789" )
// Parse string, lacking an offset-from-UTC and lacking a time zone, as a `LocalDateTime`.
.atZone( ZoneId.of( "Africa/Tunis" ) )
// Assign the time zone for which you are certain this date-time was intended. Instantiates a `ZonedDateTime` object.在
j.U.Date中没有时区正如其他正确答案所述,java.util.Date没有时区†..它代表世界协调时/GMT(⽆时区偏移)。令⼈困惑的是toString⽅法
在⽣成字符串表⽰时应⽤JVM的默认时区。避免j.U.Date由于这个原因,以及许多其他原因,您应该避免使⽤内置的
java.util.Date&.Calendar&ClineDateFormat。他们是出了名的⿇烦。相反,请使⽤java.time包捆绑在⼀起Java 8.java.time时
间类可以通过三种⽅式表⽰时间线上的某个时刻:世界协调时(Instant)带有偏移量(OffsetDateTime带着ZoneOffset)有时区(ZonedDateTime带着ZoneId)Instant在……⾥⾯java.time,基本的构建块是Instant,世界协调时间线上的⼀个时刻。使⽤Instant对
象,⽤于您的⼤部分业务逻辑。Instant instant = w();OffsetDateTime应⽤从世界协调时抵消适应某⼀地区挂钟时间.应⽤aZoneOffset得到⼀个OffsetDateTime.ZoneOffset zoneOffset = ZoneOffset.of( "-
04:00" );OffsetDateTime odt = OffsetDateTime.ofInstant( instant , zoneOffset );ZonedDateTime最好是应⽤⼀个时区,抵消加处
理异常的规则,如夏令时(DST).应⽤aZoneId转到Instant得到⼀个ZonedDateTime..始终指定适当时区名称..不要使⽤3-4缩写,例如EST
或IST既不独特也不标准化。
ZoneId zoneId = ZoneId.of( "America/Montreal" );ZonedDateTime zdt = ZonedDateTime.ofInstant( inst
ant , zoneId );LocalDateTime 如果输⼊字符串缺少任何偏移量或区域指⽰符,则将其解析为LocalDateTime.如果确定预定的时区,则分配ZoneId产⽣⼀个ZonedDateTime..参见上⾯的代码⽰例TL;DR部分在上⾯。格式化字符串呼叫toString⽅法在这三个类中的任何⼀个上⽣成⼀个字符串,
该字符串表⽰标准中的⽇期时间值。ISO 8601格式。这个ZonedDateTime类通过在括号中追加时区的名称来扩展标准格式。
String outputInstant = String(); // Ex: 2011-12-03T10:15:30ZString outputOdt = String();
// Ex: 2007-12-03T10:15:30+01:00String outputZdt = String(); // Ex: 2007-12-03T10:15:30+01:00[Europe/Paris]java时间日期格式转换
对于其他格式,请使⽤DateTimeFormatter班级,等级。通常最好让该类使⽤⽤户预期的⼈类语⾔和⽂化规范⽣成本地化格式。也可以指
定特定的格式。关于java.time这个java.time框架构建在Java 8及更⾼版本中。这些阶级取代了那个烦⼈的⽼⼈。遗产⽇期-时间类,如
java.util.Date, Calendar, & SimpleDateFormat.这个尤达-时间项⽬,现在在维护模式,建议迁移到java.time上课。若要了解更多信息,
请参见Oracle教程..并搜索堆栈溢出的许多例⼦和解释。规格是JSR 310.你们可以交换java.time对象直接使⽤数据库。⽤JDBC驱动程序符
合JDBC 4.2或者晚些时候。不需要字符串,不需要字符串java.sql.*上课。在哪⾥获得java.time类?JavaSE 8, JavaSE 9, JavaSE
10, JavaSE 11,以及以后的版本-标准JavaAPI的⼀部分是捆绑实现。Java 9添加了⼀些次要的特性和修复。JavaSE 6和JavaSE 7⼤多
数java.time功能都被移植到Java 6&7中Threeten-Backport.安卓的android包实现的更⾼版本。java.time上课。对于早期的
Android(<26),ThreeTenABP项⽬适应Threeten-Backport(上⽂所述)。看见如何使⽤ThreeTenaBP….这个三次-额外项⽬使⽤其他类
扩展java.time。这个项⽬是java.time将来可能添加的⼀个试验场。您可能会在这⾥发现⼀些有⽤的类,例如
Interval, YearWeek, YearQuarter,和更多.尤达-时间当尤达-时间仍然在积极维护,它的制造者告诉我们尽快迁移到java.time是⽅便的。
我保留此部分作为参考,但我建议使⽤java.time上⼀节代替。在……⾥⾯尤达-时间,⽇期时间对象(DateTime)确实知道它指定的时区。这
意味着来⾃UTC的抵消和该时区夏令时(DST)及其他此类异常的规律和历史。String input = "2014-01-
02T03:04:05";DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );DateTime dateTimeIndia = new DateTime
( input, timeZone );DateTime dateTimeUtcGmt = dateTimeIndia.withZone( DateTimeZone.UTC );呼叫toString⽅法⽣成字符串。
ISO 8601格式。String output = String();Joda-Time还提供了⽣成各种其他字符串格式的丰富功能。如果需要,可以
将Joda-time⽇期时间转换为java.util.Date。Java.util.Date date = Date();搜索StackOverflow中的“joda⽇期”以
到更多的⽰例,其中⼀些⾮常详细。†实际上在那⾥是嵌⼊在java.util.Date中的时区,⽤于某些内部函数(请参阅对此答案的注释)。但此内
部时区未公开为属性,且⽆法设置。这个内部时区是不所使⽤的toString⽅法⽣成⽇期-时间值的字符串表⽰;相反,JVM的当前默认时区
是动态应⽤的。因此,简⽽⾔之,我们经常说“j.u.date没有时区”。困惑?是。还有另⼀个理由来避免这些⽼⽣常谈的课程。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论