示例:我的应用程序包含两个片段。用户操作:
问题:用户选择的日期和他在fragment2上看到的日期不同。例如:
如何确保时区更改后日期不会发生变化?为什么会这样?
答案 0 :(得分:1)
日期是一个解释问题。您可以存储包含原始时区的日期,或者您可以将其存储在UTC中,然后如果要以UTC格式显示它或者应用新的时区(可能还有DSL),则可以决定输出。你需要的是一致性。
答案 1 :(得分:1)
日期值始终为UTC。显示日期时,可以使用 DateFormat 将日期转换为系统时区。
您可以为 android.intent.action.TIMEZONE_CHANGED 意图注册 BroadcastReceiver ,并在更改时区时重新格式化日期。 Date 对象的值保持不变,但 DateFormat 会将其格式化为新时区
更新
从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)
}