示例:我的應用程序包含兩個片段。用戶操作:如何強制日期在時區更改後不更改日期?
- 在片段1用戶選擇日期(此日期存儲爲一個Date對象)
- 用戶進入系統設置和更改時區
- 用戶返回到應用程序,並按下按鈕,在片段1(Date對象傳遞給fragment2並在TextView中顯示)
問題:用戶選擇的日期和他在fragment2上看到的日期不同。例如:
- 初始時區-11
- 用戶選擇2015年6月1日
- 新時區+13
- 在fragment2用戶看到2015年6月2日
如何使時區更改後日期不會更改?爲什麼會發生?
示例:我的應用程序包含兩個片段。用戶操作:如何強制日期在時區更改後不更改日期?
問題:用戶選擇的日期和他在fragment2上看到的日期不同。例如:
如何使時區更改後日期不會更改?爲什麼會發生?
日期是解釋的問題。您可以存儲包含原始時區的日期,也可以將其存儲在UTC中,然後決定輸出是否仍然以UTC顯示或應用新的時區(可能還有DSL)。喲需要的是一致性。
日期無論系統時區如何,值始終爲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)
}
你能分享相關的代碼嗎? '日期'沒有時區的概念;它只是一個圍繞「long」值的包裝(UTC以Epoch開始的毫秒數)。 –