[英]Show ISO-8601 date+time in current time?
例如,2012-10-30T22:30:00+0300 需要顯示在 2012-10-30T22:30:00-0600(例如當地時間)需要在java(android應用程序)中實現我如何管理這樣做?
這就是日期:一個普遍的時間瞬間。 顯示時選擇適當的時區,您將擁有所需的時間字符串:
Date now = new Date();
DateFormat df = df.getDateTimeInstance();
System.out.println(df.format(now)); // now, displayed in the current time zone (examle: Germany)
df.setTimeZone(theLondonTimeZone);
System.out.println(df.format(now)); // now, displayed in the time zone of London
OffsetDateTime
.parse(
"2012-10-30T22:30:00+0300" ,
DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ssX" )
)
.toInstant()
.atZone(
ZoneId.of( "Europe/London" )
)
.toString()
2012-10-30T19:30Z[歐洲/倫敦]
現代解決方案使用java.time類。
定義一個格式化程序以匹配您的輸入。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ssX" ) ;
將輸入解析為OffsetDateTime
。
String input = "2012-11-05T13:00:00+0200" ;
OffsetDateTime odt = OffsetDateTime.parse( input , f );
odt.toString(): 2012-11-05T13:00+02:00
提示:始終包括 COLON 字符作為偏移的小時和分鍾之間的分隔符。 然后我們可以跳過自定義格式模式: OffsetDateTime.parse( "2012-11-05T13:00+02:00" )
。
通過提取Instant
對象調整到 UTC,零時分秒的偏移量。
Instant instant = odt.toInstant() ;
在標准 ISO 8601 格式中,末尾的Z
表示 UTC(零偏移)。 發音為“祖魯語”。
Instant.toString(): 2012-11-05T11:00:00Z
調整到倫敦時間。
ZoneId zLondon = ZoneId.of( "Europe/London" ) ;
ZonedDateTime zdtLondon = instant.atZone( zLondon ) ;
zdtLondon.toString(): 2012-11-05T11:00Z[歐洲/倫敦]
調整到另一個時區。
ZoneId zMontreal = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtMontreal = instant.atZone( zMontreal );
zdtMontreal.toString(): 2012-11-05T06:00-05:00[美國/蒙特利爾]
所有這些對象( odt
、 instant
、 zdtLondon
和zdtMontreal
)代表同一時刻,時間線上的同一點。 同一時刻,不同的掛鍾時間。
java.time框架內置於 Java 8 及更高版本中。 這些類取代麻煩的老傳統日期時間類,如java.util.Date
, Calendar
,和SimpleDateFormat
。
要了解更多信息,請參閱Oracle 教程。 並在 Stack Overflow 上搜索許多示例和解釋。 規范是JSR 310 。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
您可以直接與您的數據庫交換java.time對象。 使用符合JDBC 4.2或更高版本的JDBC 驅動程序。 不需要字符串,不需要java.sql.*
類。 Hibernate 5 & JPA 2.2 支持java.time 。
從哪里獲得 java.time 類?
https://i.stack.imgur.com/eKgbN.png哪個 java.time 庫與哪個 Java 或 Android 版本一起使用的表
ThreeTen-Extra項目用額外的類擴展了 java.time。 該項目是未來可能添加到 java.time 的試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多。
使用 joda 時間庫以最佳方式解決了我的問題,使用 dateTime & dateTime zone 如下所示:
DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
DateTime dt = new DateTime();
DateTime dt2 = new DateTime();
dt = DateTime.parse("2012-11-05T13:00:00+0200");
System.out.println(dt.toString());
dt2 = DateTime.parse("2012-11-05T21:45:00-08:00");
DateTimeZone dtz = dt2.getZone();
System.out.println(dt.withZone(dtz).toString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.