2017-04-04 26 views
0

作用根據的Javadoc Clock.fixed,區域是:Clock.fixed是什麼區

區 - 時區使用的瞬間日期時間,不爲空轉換

但是我的代碼似乎沒有受到使用不同區域的影響。

Clock mockClock = Clock.fixed(Instant.parse("2017-04-10T17:59:00Z"), 
       ZoneId.of("UTC"));  
System.out.println("ZonedDateTime using clock "+ZonedDateTime.now(mockClock)); 

在上面的代碼,我是否設置時區爲UTC或美國/芝加哥,輸出是一樣的:

ZonedDateTime using clock 2017-04-10T17:59Z[UTC] 

如果不改變時區,有什麼作用的zone

+0

我想你嘗試與喬達時間[鏈接](http://www.joda.org/joda-time/userguide.html#TimeZones) –

+0

我測試與'Clock.fixed(Instant.parse( 「2017-04-10T17:59:00Z」),ZoneId.of(「America/Chicago」))',輸出爲'2017-04-10T12:59-05:00 [America/Chicago]'。您在哪裏以及如何設置「美國/芝加哥」時區? – 2017-04-04 12:23:20

回答

0

通常,使用的靜態方法

Clock.system(ZoneId z) 
Clock.systemDefaultZone() 
Clock.systemUTC() 

一個檢索的Clock實例是「跑」的時鐘,返回當前時間。 A Clock總是跟蹤UTC,但也知道它的時區,它在返回日期/時間值時使用。

如果仔細閱讀Javadoc,您會看到Clock.fixed()返回一個未運行的特殊類型的時鐘,也就是說,它始終設置爲特定的時間並且不隨時間變化。

ZonedDateTime.now(Clock clock)查詢給定的時鐘並返回調整爲Clock的時區的當前時間。

所以,當你做

Clock mockClock = Clock.fixed(Instant.parse("2017-04-10T17:59:00Z"), ZoneId.of("UTC")); 
ZonedDateTime zdt = ZonedDateTime.now(mockClock); 

會發生以下情況:

  1. 一個特殊的「未運行」的時鐘是設定的日期/時間你給創建,用的時區規範世界標準時間。
  2. ZonedDateTime.now(mockClock)調用讀取時鐘的當前值(在您的情況下爲固定值),並創建一個帶有時鐘值和UTC時區的ZonedDateTime