2015-05-20 50 views
0

示例:我的應用程序包含兩個片段。用戶操作:如何強制日期在時區更改後不更改日期?

  1. 在片段1用戶選擇日期(此日期存儲爲一個Date對象)
  2. 用戶進入系統設置和更改時區
  3. 用戶返回到應用程序,並按下按鈕,在片段1(Date對象傳遞給fragment2並在TextView中顯示)

問題:用戶選擇的日期和他在fragment2上看到的日期不同。例如:

  • 初始時區-11
  • 用戶選擇2015年6月1日
  • 新時區+13
  • 在fragment2用戶看到2015年6月2日

如何使時區更改後日期不會更改?爲什麼會發生?

+0

你能分享相關的代碼嗎? '日期'沒有時區的概念;它只是一個圍繞「long」值的包裝(UTC以Epoch開始的毫秒數)。 –

回答

1

日期是解釋的問題。您可以存儲包含原始時區的日期,也可以將其存儲在UTC中,然後決定輸出是否仍然以UTC顯示或應用新的時區(可能還有DSL)。喲需要的是一致性。

1

日期無論系統時區如何,值始終爲UTC。當您顯示日期時,您可以使用DateFormat將日期轉換爲系統時區。

您可以註冊的BroadcastReceiver android.intent.action.TIMEZONE_CHANGED意圖和時區的時候改變格式化的日期。您日期對象的值保持不變,但日期格式將其格式化到新的時區

更新:從Timezone example in broadcast receiver

<receiver android:name=".TimeZoneChangedReceiver" 
    android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.TIMEZONE_CHANGED " /> 
    </intent-filter> 
</receiver> 

採用

例子在TimeZoneChangedReceiver

@Override 
public void onReceive(final Context context, final Intent intent) { 
    Date now = new Date(); 
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm"); 
    String formattedDate = format.format(now); 
    mDateView.setText(formattedDate) 
} 
+0

請問您可以添加一個簡單的例子,如何重新設置時區更改日期?謝謝。 – BArtWell

+0

是否有可能僅將Date對象(在fragment1中)轉換而不將其設置爲TextView?可能會將其轉換爲數學? – BArtWell

+1

可能嗎?是。推薦的?沒有! – msh