簡體   English   中英

在當前時間顯示 ISO-8601 日期+時間?

[英]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

tl;博士

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[美國/蒙特利爾]

所有這些對象( odtinstantzdtLondonzdtMontreal )代表同一時刻,時間線上的同一點。 同一時刻,不同的掛鍾時間。


Java 中所有日期時間類型的表,包括現代的和傳統的


關於java.time

java.time框架內置於 Java 8 及更高版本中。 這些類取代麻煩的老傳統日期時間類,如java.util.DateCalendar ,和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 的試驗場。 您可以在這里找到一些有用的類,比如IntervalYearWeekYearQuarter ,和更多

使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM